いつもお世話になっております。
Perlでメール送信をしたいのですが、
HELOコマンドを送信するのですが、接続に失敗します。
何故失敗するのが、原因が分かりません。
何を調査したらよいのか、
ご存知の方、ご教授を頂けますでしょうか。
(プログラム)
ファイル名:mail.cgi
一部抜粋
# ------------------------------------------------------- #
# SOCKETの作成
# ------------------------------------------------------- #
# PORT番号を取得します
$port = getservbyname('smtp','tcp');
# PORT、IPで構造体を作成する
$struct = sockaddr_in($port,inet_aton($server));
# ソケットの生成
socket(SH, PF_INET, SOCK_STREAM, 0)
|| die("ソケットの生成失敗 $!") ;
# 接続
connect(SH, $struct )
|| die("接続失敗 $!") ;
# ソケットのバッファリングは行わない
select(SH); $| = 1; select(STDOUT);
$respons = <SH> ;
unless($respons =~ /^220/) {
close(SH); die("接続失敗 $!") ;
}
# ------------------------------------------------------- #
# コマンドの送信
# ------------------------------------------------------- #
# -------- HELOコマンドの送信とレスポンスの確認 --------- #
# コマンドの作成、送信
$command = "HELO $server\n";
print SH $command ;
# レスポンスの受信、確認
$respons = <SH> ;
&decode(\$respons) ;
# レスポンスの確認
unless($respons =~ /^250/){
close(SH); die("HELOコマンド失敗 $!") ; ←ログをみる限りココに着ます。
}
(err_log)
[Wed Aug 27 12:25:33 2008] [error] [client XXX.XXX.XXX.XXX] HELOコマンド失敗 Illegal seek at /XXX/mail.cgi
line 149.,
プログラムの149行目は、die("HELOコマンド失敗 $!") の個所です。
No.3
- 回答日時:
正常にメール送信できているクライアントPCで Wireshark を動かし,流れているSMTPパケット群を抽出して,そのSMTPコマンド文字列をそのままPerlで送信すればいいんじゃないですか。
http://okwave.jp/qa4230418.html の私の過去の回答 ANo.1
No.2
- 回答日時:
> サーバーの管理者に問い合わせはしましたが、
> サーバーのメールサービスは起動していますと
> 連絡はありました。
> $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
No.1
- 回答日時:
# レスポンスの確認
unless($respons =~ /^250/){
close(SH); die("HELOコマンド失敗 $!") ; ←ログをみる限りココに着ます。
}
何で返ってきたコードの確認をしていないんですか?
すみません。
コードの確認が取れました。
コードは、421 session timeoutです。
サーバーの管理者に問い合わせはしましたが、
サーバーのメールサービスは起動していますと
連絡はありました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(メールソフト・メールサービス) Thunderbirdのメール送信ができません 1 2022/10/28 16:54
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- ネットワーク コマンドプロンプトで、コマンドの飛ばし方を教えてください。 ネットワークにデータを飛ばす(copy) 4 2022/10/19 11:21
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハマったので助けて~。Apache...
-
実行中のcpan processを終了さ...
-
ArduinoのジャイロモジュールMP...
-
例外処理のフローチャートの記...
-
「デバイスは PRN を初期化でき...
-
標準モジュールを削除したい。(...
-
大量の標準モジュールを解放す...
-
モジュールの最大数はいくつな...
-
Excel VBAでリンク切れをチェッ...
-
LCD ディスプレイを Raspberry ...
-
【python】requestsでdataとし...
-
ActivePerl付属のPPMでモジュー...
-
Excel VBA 『Call』で呼び出す...
-
pythonスクリプトの停止方法に...
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
powershellで関数名を変更する...
-
エクセルVBAでシートモジュール...
-
Excel VBA 定義されたプロージ...
-
Cからシェルを起動し返り値をハ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AIX6でファイルのタイムスタン...
-
時間がかかり過ぎたプロセスを...
-
open MAILでの"|"
-
Active Directoryでグループに...
-
LinuxにおいてのPerlのプログラ...
-
Perlでpopen()的なものを使って...
-
forkで作れる子プロセス数が限...
-
HELOコマンドが失敗する。
-
gem install houston
-
system関数とqx演算子の違いに...
-
Perlの処理待ちコマンド
-
perlスクリプト内でシェルコマ...
-
ディスク容量について
-
実行中のcpan processを終了さ...
-
Perlで特定のコマンドを実行さ...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
"JScript"が見つかりません!
おすすめ情報