- ベストアンサー
Perlでメール送信時にHELOコマンドが失敗する理由と解決方法
- Perlでメール送信をする際に、HELOコマンドの送信で接続が失敗してしまう場合があります。
- この問題の原因は、ソケットの生成や接続の際にエラーが発生していることです。
- 解決方法としては、ソケットの作成や接続を正しく行うように修正することが求められます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$command = "HELO $server\r\n"; としても同じですか ? 行末が CRLF じゃないといけないという厳しいメールサーバかも しれません。
その他の回答 (3)
- jjon-com
- ベストアンサー率61% (1599/2592)
正常にメール送信できているクライアントPCで Wireshark を動かし,流れているSMTPパケット群を抽出して,そのSMTPコマンド文字列をそのままPerlで送信すればいいんじゃないですか。 http://okwave.jp/qa4230418.html の私の過去の回答 ANo.1
- sakusaker7
- ベストアンサー率62% (800/1280)
> サーバーの管理者に問い合わせはしましたが、 > サーバーのメールサービスは起動していますと > 連絡はありました。 > $command = "HELO $server\n"; ここでのコマンドを HELOじゃなくて EHLO にすると何か変わりますか? あと、POP before SMTP使わなきゃいけないとかはないですよね?
補足
>ここでのコマンドを HELOじゃなくて EHLO にすると何か変わりますか? EHLOで実施しましたが、結果は同じでした。 試しに手動で実施したところ動作します。 プログラムから実施するとうまく動作しません。 >telnet XXX.XXX.XXX.XXX 25 Trying XXX.XXX.XXX.XXX... Connected to XXX.XXX.XXX.XXX. Escape character is '^]'. 220 XXX.XXX.XXX.XXX [ESMTP Server] service ready;.; 08/28/08 12:28:56 >HELO XXX.XXX.XXX.XXX 250 XXX.XXX.XXX.XXX
- sakusaker7
- ベストアンサー率62% (800/1280)
# レスポンスの確認 unless($respons =~ /^250/){ close(SH); die("HELOコマンド失敗 $!") ; ←ログをみる限りココに着ます。 } 何で返ってきたコードの確認をしていないんですか?
お礼
すみません。 コードの確認が取れました。 コードは、421 session timeoutです。 サーバーの管理者に問い合わせはしましたが、 サーバーのメールサービスは起動していますと 連絡はありました。
補足
ログをみる限り、コードが表示されていませんが、 どのように確認すればよいのですか?
お礼
ご連絡が遅くなり大変申し訳ございません。 t-okura様の言う通り\r\nで実施したら、 正常に動作しました。 ありがとうございました。