2008年2月8日金曜日

Net::SMTP::TLSがうまくいかない

いや、基本的にはうまくいっている。
うまくいかないのは変数をわたすとき
$mail = new Net::SMTP::TLS('smtp.hoge.bar', Port => 587, User => 'user', Password => 'password');

って感じだとうまくいく。
# まぁ当然であるが・・・
んでそれを

%smtp_set;
# %smtp_setに値を突っ込む作業
$smtp_host = $smtp_set{'smtp_host'};
$smtp_port = $smtp_set{'smtp_port'};
$smtp_usr = $smtp_set{'smtp_usr'};
$smtp_passwd = $smtp_set{'smtp_passwd'};
$mail = new Net::SMTP::TLS($smtp_host, Port => $smtp_port, User => $smtp_usr, Password => $smtp_passwd);

とかにするとエラーを吐く
'onnect failed :IO::Socket::INET: Bad hostname 'smtp.hoge.bar

ただ単に変数参照ができないのか?!
と思うんだけど
$mail = new Net::SMTP::TLS('smtp.hoge.bar', Port => 587, User => $smtp_usr, Password => $smtp_passwd);

こういうのはOKだったりする。
まぁ引数次第なのか?と思うんだけど・・・
エントリ書き込み時点での最新の
Net::SMTP::TLS, IO::Socket::INETを使ってるんだが、
Host, Portでエラーが出てた。
なんとか変数で突っ込めないかなぁ。
# じゃないと作ってるSMTPで送信するプログラムで
# HostとPortが設定ファイルで指定ができないなぁ...


原因がわかった・・・。
どうもハッシュが悪いくさい。
SMTPの設定ファイルは別にしているのだが、
ハッシュを使わず直接
$smtp_host = 'smtp.hoge.bar';

とかするとうまくいった。
なんかゴミでも入ってるのかなぁ。
printした感じだとそうでもないのだが・・・。
それにそれだとなんで$smtp_usr, $smtp_passwdはOKなのか。
という疑問が残りそうなんだけど...。
よくわかりませんね。

0 件のコメント:

コメントを投稿