- - PR -
POP Before SMTP サーバからメールを送信できない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-22 18:16
POP Before SMTP サーバからメールを送信したいのですが、
「メールボックスが使用できません。 サーバーの応答: 5.7.1 <[送信先のメールアドレス]>... Relaying denied 」 というエラーが発生しメールを送信することが出来ません。 以下のようなコードで送信を試みているのですが、どこか記述が間違っているのでしょうか? よろしくお願いします。 // POP Before SMTP サーバのため、一度POPサーバにログイン string userName = "test@test.net"; string password = "test"; TcpClient tcp = new TcpClient(); tcp.Connect("test.net", 110); using (StreamWriter sw = new StreamWriter(tcp.GetStream())) { sw.Write("USER " + userName + "\nPASS " + password + "\nQUIT\n"); } tcp.Close(); // 送信データの作成 MailAddress ma = new MailAddress("test@test.net"); // 送信元 MailAddress ma2 = new MailAddress("[送信先のメールアドレス]"); // 送信先 MailMessage mm = new MailMessage(ma.Address, ma2.Address, "Title", "Body"); // メールの送信 SmtpClient sc = new SmtpClient("smtp.test.net", 25); sc.Send(mm); [ メッセージ編集済み 編集者: hIzzI 編集日時 2006-08-24 12:08 ] | ||||
|
投稿日時: 2006-08-22 18:36
こんばんは。
件の SMTP サーバが SMTP-AUTH を導入しているとしたら、コードに不備があります(掲載されていないだけかもしれませんが)。 その辺りいかがでしょうか。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||
|
投稿日時: 2006-08-23 11:58
返信ありがとうございます。
SMTP-AUTHに対応するためメールの送信部分を以下のようにしたのですが同じエラーが発生してしまします。 // メールの送信 NetworkCredential nc = new NetworkCredential(userName, password); SmtpClient sc = new SmtpClient("smtp.test.net", 25); sc.UseDefaultCredentials = false; sc.Credentials = nc; sc.Send(mm); SMTP-AUTH以前に根本的な考え方が何か間違っているのでしょうか? 仕様としては 会員登録が出来るWEBサイトがあり、そこで新規登録を行ったときにレンタルサーバーのSMTPサーバー(ここではsmtp.test.net、差出人はtest@test.net)を通して、新規登録完了のメールを送信する といったWEBサイトではよくある仕組みです。 メール送信の部分がうまくいかないためお手上げ状態です。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-08-23 23:18
#私は初学者なのでwebサーバとの関係がよくわからないのですが(汗
実際にレンタルサーバのSMTPサーバはSMTP-Authに対応しているんでしょうか?TELNETで繋いで話した場合にはどうなりますか? | ||||
|
投稿日時: 2006-08-23 23:47
何となく気になりまして書き込みいたします。
的を外していたら申し訳ありません。 Pop3にアクセスした結果のステータスは正常値が戻ってきているのでしょうか? 少々面倒だと思われますが、コマンド単位で戻り値のステータスを確認し、 正常にPop3にアクセスできているかという箇所を確認してみたいところです。 またSmtpの送信ロジック自体をPop3と同様にTcpClientを利用したロジックに切り替え、 コマンド単位でエラーステータスを確認してみるのも一つの手だと思います。 | ||||
|
投稿日時: 2006-08-24 00:31
こんばんは。
私もAhfさんと同じことを考えていました。
これだと送りっぱなしでステータスを確認せずに抜けてしまっている ので、POP Before SMTP になっていないのではないのかなぁと。 あとは ue さんの指摘は「件の SMTP サーバが SMT-AUTH を 導入しているとしたら」という仮定でのことなので(たぶんエラーメッ セージが SMTP-AUTH を導入している場合と同じだったのだと 思われる)そこで SMTP-AUTH のコーディングをするのは、ちょっ と違うのかなぁ…と思ってみたり。 その辺は shimix さんも指摘していますが、SMTP-AUTH に対 応しているんでしょうか。 まずは問題の切り分けを。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2006-08-28 23:46
shimixさん、Ahfさん、ぽぴ王子さん返信ありがとうございます!
みなさんのご指摘を元にPOP3 Before SMTPの部分をコマンド単位に切り分けてサーバー側に送信したところうまくいきました。 ありがとうございました! 以下は変更後のPOP3 Before SMTP部分のコードです。(Label1にサーバから受信したデータを表示しています。) using (StreamWriter sw = new StreamWriter(ns)) using (StreamReader sr = new StreamReader(ns)) { sw.NewLine = "\r\n"; sw.AutoFlush = true; Label1.Text = sr.ReadLine() + "<br>"; sw.WriteLine("USER {0}", userName); Label1.Text += sr.ReadLine() + "<br>"; sw.WriteLine("PASS {0}", password); Label1.Text += sr.ReadLine() + "<br>"; if (tcp.Connected) { sw.WriteLine("QUIT"); Label1.Text += sr.ReadLine() + "<br>"; } } tcp.Close(); |
1