![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
いつもお世話になっております。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AIX6でファイルのタイムスタン...
-
マルチスレッドとマルチプロセ...
-
時間がかかり過ぎたプロセスを...
-
Perlでpopen()的なものを使って...
-
gem install houston
-
例外処理のフローチャートの記...
-
Excel VBA 『Call』で呼び出す...
-
標準モジュールを削除したい。(...
-
VBSがコンパイルエラーになりま...
-
ユーザー定義関数に#NAME?が返...
-
VBA This Workbookモジュール...
-
LCD ディスプレイを Raspberry ...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 標準モジュール内で...
-
Access VBA標準モジュールにつ...
-
ベースモジュールって?
-
エクセルVBA クラスモジュール...
-
モジュールの最大数はいくつな...
-
'Range'メソッドは失敗しました
-
VBAでoutlook365が起動しません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AIX6でファイルのタイムスタン...
-
open MAILでの"|"
-
ハマったので助けて~。Apache...
-
実行中のcpan processを終了さ...
-
マルチスレッドとマルチプロセ...
-
Active Directoryでグループに...
-
Perlでpopen()的なものを使って...
-
Perlの処理待ちコマンド
-
並列処理について
-
時間がかかり過ぎたプロセスを...
-
Perlで日本語から始まり記号で...
-
HELOコマンドが失敗する。
-
system関数とqx演算子の違いに...
-
perlスクリプト内でシェルコマ...
-
LinuxにおいてのPerlのプログラ...
-
Perlでexitコードを取得する方法
-
perl から unix コマンドを入...
-
スクリプトについて
-
MS-DOSでperl実行時にコマンド...
-
system から得た情報を変数に入...
おすすめ情報