- PR -

メール送信機能。

投稿者投稿内容
sachiko
常連さん
会議室デビュー日: 2003/11/26
投稿数: 36
投稿日時: 2003-12-09 07:47
C#とASP.NETを使用し、SMTPメールを送信しようとしているのですが、うまくいきません。
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
//送信者
mm.From = "hty_izumonokami@yahoo.co.jp";
//送信先
mm.To = "hty_izumonokami@yahoo.co.jp";
//題名
mm.Subject =txt_mail_title.Text;
//本文
mm.Body =txt_mail_sentence.Text;
//JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp" ;
//送信する
System.Web.Mail.SmtpMail.Send(mm);

コード自体おかしい所はないと思うのですが、
サーバーによって送信者アドレスが拒否されました。サーバーからの応答は次のとおりです。521 smtp.mail.yahoo.co.jp closing transmission channel. You must be pop-authenticated before you can use this smtp server, and you must use your yahoo mail address for the Sender/From field.
とのエラーが表示されます。
明らかにyahooの認証が関係しているような気がしています。もし同じようなプログラムを書いていて解決した方などがいらっしゃったら、何かご指導いただければと思います。
宜しくお願いします。
KeroKero
常連さん
会議室デビュー日: 2003/11/06
投稿数: 26
投稿日時: 2003-12-09 08:51
引用:
521 smtp.mail.yahoo.co.jp closing transmission channel. You must be pop-authenticated before you can use this smtp server, and you must use your yahoo mail address for the Sender/From field.
とのエラーが表示されます。



中ほどのところを訳すと,「smtpサーバを使う前にpop認証を行わなければならない。」ということです。この仕様については「POP before SMTP」で検索すれば詳しい解説が出てると思うので,そちらを参照してみて下さい。

[ メッセージ編集済み 編集者: KeroKero 編集日時 2003-12-09 08:52 ]
sachiko
常連さん
会議室デビュー日: 2003/11/26
投稿数: 36
投稿日時: 2003-12-09 09:59
参考資料ありがとうございます。
とても参考になりました。
いろいろ読んでみて納得しました。
どうやらサポートされているのが少なくyahooとかでは受信できないようですね?
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-12-09 11:00
POP before SMTPを調べてみると、SMTPの前にPOPをすればいいだけみたいなので、
SmtpMail.Sendの前に以下のようなコードを実行すればいいのではないでしょうか?
コード:
    using (System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient())
    {
        tcp.Connect(POPサーバー名,110);
        using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
            sw.Write("USER ユーザ名\nPASS パスワード\nSTAT\nQUIT\n");
    }


詳しくは、http://dobon.net/vb/dotnet/internet/receivepop3mail.html などを参考
(上記URLのサンプルだとメールを取ってきて消すので注意)
sachiko
常連さん
会議室デビュー日: 2003/11/26
投稿数: 36
投稿日時: 2003-12-09 23:32
System.Net.Sockets.TcpClient tcp=new System.Net.Sockets.TcpClient();
tcp.Connect("www.yahoo.com",80);
StreamWriter sw = new StreamWriter(tcp.GetStream());
sw.Write("USER ユーザ名\nPASS パスワード\nSTAT\nQUIT\n");
System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
//送信者
mm.From = "**@yahoo.co.jp";
//送信先
mm.To = "**@yahoo.co.jp";
//題名
mm.Subject =txt_mail_title.Text;
//本文
mm.Body =txt_mail_sentence.Text;
//JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
//SMTPサーバーを指定する
System.Web.Mail.SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp" ;
//送信する
System.Web.Mail.SmtpMail.Send(mm);

という形にしたのですが、同じようなエラーが出てしまい、yahoo側から拒絶されます。
パスワードとIDのところがおかしいのでしょうか?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-12-10 00:44
引用:

sachiさんの書き込み (2003-12-09 23:32) より:

tcp.Connect("www.yahoo.com",80);



なぜにWebサーバの80に…
POPサーバのPOPのポートにつないでください…
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-10 00:50
sachiさん、こんばんは。

引用:

tcp.Connect("www.yahoo.com",80);


POP before SMTP の仕様については知りませんが、通常、POP3のポートは110番で、80番はHTTPじゃないかと思うんですが...。
また、メールサーバは www.yahoo.com でいいんですか?
取り敢えず telnet とか使って、指定ホストの指定ポートに接続出来るかどうか、確認してみては如何でしょうか。
sachiko
常連さん
会議室デビュー日: 2003/11/26
投稿数: 36
投稿日時: 2003-12-10 00:53
あ!ごめんなさい。送信なんで25でしょうか・・・?
それでやってもやはり、拒否されてしまいます。

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