- PR -

SmtpMail.Sendのエラーについて

1
投稿者投稿内容
Chata
会議室デビュー日: 2004/04/16
投稿数: 12
投稿日時: 2004-05-15 17:10
過去のスレッドでも何回か出ておりますが、

MailMessage Msg = new MailMessage();
Msg.To = "***@*****";
Msg.From = "***@*****";
Msg.Subject = "テスト";
Msg.BodyFormat = MailFormat.Text;
Msg.Body = "Test";
Msg.BodyEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp");
SmtpMail.SmtpServer = "***.***.***.***";
SmtpMail.Send(Msg);

と処理を行いますと

「サーバーによって1つまたは複数の受信者アドレスが拒否されました
 サーバーからの応答は次の通りです。
 550 5.7.1<送信したメールアドレス>...Relaying denied

 'CDO.Message'オブジェクトにアクセスできませんでした」

とエラーメッセージが返ってきます。
アウトルック等のメールソフトで受信した後同じ処理を行うと、今度は問題
なく送信処理が出来ます。

そこで、過去のスレッドにもありましたが
//POP before SMTPの回避方法。
using (System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient())
{
 tcp.Connect("***.***.***.***",110);
 using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
 sw.Write("USER ユーザ名/nPASS パスワード/nSTAT/nQUIT/n");
}

と記述してみましたが、全く同じエラーが発生してしまいます。
全く原因が判らなかったので、他の所(どこだか忘れてしまいました)で

SmtpMail.SmtpServer = "***.***.***.***";
の所を
SmtpMail.SmtpServer = "localhost"; にして
(1)Smtp仮想サーバーのプロパティ->配信->送信セキュリティにて
SMTPサーバーのユーザ名とパスワードを設定
(2)SMTP仮想サーバのプロパティ->配信->詳細設定で
スマートホストのアドレスを数字指定

としたところ、

「転送においてサーバーに接続できませんでした
 'CDO.Message'オブジェクトにアクセスできませんでした」

とエラーメッセージが帰ってきてしまいます。

多分SMTP仮想サーバーの設定にて、何か間違いがあると思うのですが、
それが判らず困っております。

大変長々と書かせて頂きましたが、何卒宜しくお願い申し上げます。

[環境]
サーバー
 RedHat Linux 7.3
 SendMail
クライアント
 WindowsXP pro
 C#
 .NET Farmework 1.1






Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-15 18:54
諸農です。

引用:

コード:
using (System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient())
{
 tcp.Connect("***.***.***.***",110);
 using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
 sw.Write("USER ユーザ名/nPASS パスワード/nSTAT/nQUIT/n");
}



と記述してみましたが、全く同じエラーが発生してしまいます。



ちょっと前にも同じような内容の投稿がありましたが。。
CRLFを渡してみてはいかがでしょうか?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Chata
会議室デビュー日: 2004/04/16
投稿数: 12
投稿日時: 2004-05-15 19:17
引用:

諸農様

早速のご返答、有り難うございます。

引用:

コード:
using (System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient())
{
 tcp.Connect("***.***.***.***",110);
 using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
 sw.Write("USER ユーザ名/nPASS パスワード/nSTAT/nQUIT/n");
}



と記述してみましたが、全く同じエラーが発生してしまいます。



ちょっと前にも同じような内容の投稿がありましたが。。
CRLFを渡してみてはいかがでしょうか?




と折角教えて頂きましたが、大変恥ずかしい話あまりこの辺りは詳しく
ないので、諸農様が仰っている
「CRLFを渡してみてはいかがでしょうか?」
の具体的な方法が判りません。

そこでもし宜しければ、これの具体的な記述方法を教えて頂ければ大変
助かります。
お手数をお掛け致しますが、何卒宜しくお願い致します。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-15 20:11
諸農です。

CRLF=0x0d+0x0a=\r\n のことです。

引用:

と折角教えて頂きましたが、大変恥ずかしい話あまりこの辺りは詳しく
ないので、



参考にされた元のコードの意味ぐらいは理解しておいた方がよいです。
でないと、新たな問題が発生した時に、切り分けが出来なくなりますからね。
また、プログラミングを行うのであれば少なくとも基本となる項目は押さえ
ておいた方がよいと思います。
あと、POP3についてはRFC1939を参照してください。

--追加編集--
CRLFについては「3. Basic Operation」を参照してください。

_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-05-15 20:14 ]
Chata
会議室デビュー日: 2004/04/16
投稿数: 12
投稿日時: 2004-05-16 16:44
諸農様

早速のご返事、有り難うございました。

引用:

CRLF=0x0d+0x0a=rn のことです。



ご指摘を受けた点で下記の通りに修正した所、無事に処理が終了致しました。

sw.Write("USER ユーザ名/r/nPASS パスワード/r/nSTAT/r/nQUIT/r/n");

本当に有り難うございました。
また何かありました時はその際も宜しくお願い致します。

1

スキルアップ/キャリアアップ(JOB@IT)