今、smtpを利用したメールの分割送信(自分宛でスパムではありません)を行うスクリプトを作成しているのですが、
Net::SMTPの使用がうまく行かず困っています。
使用規約では、Perlのモジュールの使用は使用申請入らないように読み取れたのですが、実際は必要だったのでしょうか。
現在、ごく一般的なsmtpへの受け渡し用の以下のスクリプトですが
use Net::SMTP;
my $smtp = Net::SMTP->new($host);
こちらのサーバは、smtp-auth仕様なので、その次の$smtp->auth(<ユーザ名>, <パスワード>);で、つまずいているのかと思っ
たのですが、
my $smtp = Net::SMTP->new($host, Debug=>1);
にて、デバッグをしてみると、接続拒否が戻ってきます。
Authen::SASLも設定して試したのですが、そもそものサーバへの接続が拒否されている状況のようです。
他のサーバでは、このスクリプトで無事送信ができていたので、原因がつかめません。
まだまだ未熟ゆえ、お解りになる方のお力をお借りいたしたく思います。
よろしくお願い致します。
濱崎翡翠
Perlに詳しくないのとしっかり試せていないので、
参考になるかは分かりませんが……。
> my $smtp = Net::SMTP->new($host, Debug=>1);
> にて、デバッグをしてみると、接続拒否が戻ってきます。
「$host」には何をセットしてますでしょうか?
手元で「localhost」と指定して試してみましたが、
コネクションが出来ているようです。
(そういう問題じゃない……ということかもしれませんが……)
Net::SMTP>>> Net::SMTP(2.29)
Net::SMTP>>> Net::Cmd(2.26)
Net::SMTP>>> Exporter(5.58)
Net::SMTP>>> IO::Socket::INET(1.29)
Net::SMTP>>> IO::Socket(1.29)
Net::SMTP>>> IO::Handle(1.25)
Net::SMTP=GLOB(0xca7c9e0)<<< 220 cosmos.hyec.org ESMTP Postfix
Net::SMTP=GLOB(0xca7c9e0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0xca7c9e0)<<< 250-cosmos.hyec.org
Net::SMTP=GLOB(0xca7c9e0)<<< 250-PIPELINING
Net::SMTP=GLOB(0xca7c9e0)<<< 250-SIZE 10240000
Net::SMTP=GLOB(0xca7c9e0)<<< 250-ETRN
Net::SMTP=GLOB(0xca7c9e0)<<< 250-STARTTLS
Net::SMTP=GLOB(0xca7c9e0)<<< 250-AUTH PLAIN LOGIN
Net::SMTP=GLOB(0xca7c9e0)<<< 250-AUTH=PLAIN LOGIN
Net::SMTP=GLOB(0xca7c9e0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0xca7c9e0)<<< 250-8BITMIME
Net::SMTP=GLOB(0xca7c9e0)<<< 250 DSN
具体的に動かなかったときの最小コードと
出力されたエラーメッセージをポストしていただければ
もっと具体的なことが言えるかもしれません。
(あるいは他のPerl使いの人が教えてくれるかも……)
とりいそぎ。
--
Yuta Hayakawa
(HYEC.ORG)
お答えいただいた「localhost」にて、無事接続が出来ました。
ありがとうございました。
なぜか、頑なにsmtpサーバを指定しなければならないと思い込み
$server_smtp = "mail.hyec.org";
$server_smtp_port = "587";
のような、設定をしておりました。
よく考えれば、同一サーバ内での処理なので「localhost」でよかったのですね。
ちなみに、こちらのsmtpサーバは「localhost」ではなく、サーバを上記のようなアドレス指定すると、送信できないのでしょうか。
念のために。今回のスクリプトを下記に記します。
$smtp = Net::SMTP->new($server_smtp, $server_smtp_port, Timeout =>
$timeout, Debug => int($debug / 2)) || &VERBOSE('error', 'error',
'ERROR: Net::SMTP new / server = ' . $server_smtp);
$smtp->mail($envelope_from) || &VERBOSE('error', 'error', 'ERROR:
Net::SMTP mail = ' . $envelope_from); $smtp->auth($user, $passwd)or
die("aurh failed\n");
最後になりましたが、
あらためまして、ありがとうございました。
> ちなみに、こちらのsmtpサーバは「localhost」ではなく、
> サーバを上記のようなアドレス指定すると、送信できないのでしょうか。
ちょっと内部向けDNSの都合といいますか、
このサーバが使用しているDNSの都合といいますか、
外部から接続可能なサーバ名での接続は今のところ出来ません。
特別な理由があり、「localhost」だと支障がある……
というご意見がユーザの皆様からあれば考えますが、
現状はそのように指定可能なよう構成する予定はありません。