- PR -

メール送信時のエラーについて

1
投稿者投稿内容
SIVA
会議室デビュー日: 2005/05/25
投稿数: 9
投稿日時: 2005-10-27 18:32
環境:WinXP Pro、VS.NET2003、C#

独自の簡単なメールソフトを作成中なのですが、
メール送信時にエラー「'CDO.Message' オブジェクトにアクセスできませんでした。」が発生しました。
POP Before SMTP対応もしているつもりなんですがやはり...。

メールサーバーを自分で作成できないのでYahooのメールアカウントを用いています。
Outlook Expressでは、そのアカウントで送受信が可能な状態なのですが、自前のプログラムでは上手く行かない状態です。
設定上の問題や不足部分等がありましたら教えていただけませんか?

以下ソース
string strUserName = yahooのアカウント名;
string strUserPW = アカウントのパスワード;
try
{

using (System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient())
{
  tcp.Connect("pop.mail.yahoo.co.jp",110);
  using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
sw.Write("USER " + strUserName + "/r/nPASS " + strUserPW + "/r/nSTAT/r/nQUIT/r/n");
}

System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
mm.From = "test@test.ne.jp";
mm.To =strUserName + "@yahoo.co.jp";
mm.Subject = "てすと送信";
mm.Body = "てすとで送信しました" ;
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
System.Web.Mail.SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp";
System.Web.Mail.SmtpMail.Send(mm);
}
catch ( Exception ex )
{
// 例外エラーの場合
MessageBox.Show(ex.Message, "例外エラー",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-10-28 05:35
引用:

SIVAさんの書き込み (2005-10-27 18:32) より:
環境:WinXP Pro、VS.NET2003、C#

独自の簡単なメールソフトを作成中なのですが、
メール送信時にエラー「'CDO.Message' オブジェクトにアクセスできませんでした。」が発生しました。


どのメソッドを実行したところで例外が発生したのですか?
System.Web.Mail.SmtpMail.Send(mm);のところ?

引用:
コード:
tcp.Connect("pop.mail.yahoo.co.jp",110); 
using (StreamWriter sw = new StreamWriter(tcp.GetStream())) 
    sw.Write("USER " + strUserName + "/r/nPASS " + strUserPW + "/r/nSTAT/r/nQUIT/r/n"); 



本当にこのコードで認証できています?認証できていることを確認しました?
普通はUSERコマンドやPASSコマンドを送った後、それぞれ応答を待つ必要があるはずです。+OKはちゃんと帰ってきてます?
POP before SMTPで認証されていないと、CDO.Message例外が発生する場合があるようですが・・・。

引用:
コード:
	System.Web.Mail.MailMessage mm = new System.Web.Mail.MailMessage();
	mm.From = "test@test.ne.jp";
	mm.To =strUserName + "@yahoo.co.jp";
	mm.Subject = "てすと送信";
	mm.Body = "てすとで送信しました" ;
	mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220);
	System.Web.Mail.SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp";
	System.Web.Mail.SmtpMail.Send(mm);	



細かな事ですが、実在する他人のドメインを使ってテストするのは止めましょう。送信エラーになった場合には、エラーメールがtest@test.ne.jpに送り返される事になるんですよ。テストで使うならたとえ面倒でもテスト用のサーバーを立てるか、せめて他人に迷惑をかけないように自分のメールアドレスを使うか、test@example.ne.jpの様に誰のものでもないアドレス(exampleはRFC2606で予約されており誰も使ってない)を使いましょう。
実在しないメールアドレスを指定しているとCDO.Message例外が発生する場合があるそうです。そちらもあわせてチェックを。
SIVA
会議室デビュー日: 2005/05/25
投稿数: 9
投稿日時: 2005-10-28 10:54
甕星様ご返答ありがとうございます。

例外の発生箇所はおっしゃった通り
System.Web.Mail.SmtpMail.Send(mm); の所です。(すみません説明不足でした)

また、「POP before SMTP」で認証が上手く行っているか?の確認が未確認でした。
多分、その部分が原因ではないか?と思っており確認中です。

最後にご指摘ありがとうございます。
確かに「test@test.ne.jp」では不味いですよね^^;。
今度は私のメアドで試してみたいと思います。
SIVA
会議室デビュー日: 2005/05/25
投稿数: 9
投稿日時: 2005-10-28 15:19
認証が上手く行っているかが未確認でしたので、

tcp.Connect("pop.mail.yahoo.co.jp",110);
using (StreamWriter sw = new StreamWriter(tcp.GetStream()))
sw.Write("USER " + strUserName + "/r/nPASS " + strUserPW + "/r/nSTAT/r/nQUIT/r/n");

の部分を
[http://dobon.net/vb/dotnet/internet/receivepop3mail.html]
で紹介されているソースを元に入れ替えて確認してみました。
(「サーバーに接続」から「PASSの送信」までと「QUITの送信」の箇所)
PASSコマンドを送った後に応答では、
+OK maildrop ready, 0 message ....
となり次は、QUITコマンドを送っています。

特に失敗している訳では無かったと解釈しましたが、
System.Web.Mail.SmtpMail.Send(mm);
の所でCDO.Messageの例外が出てしまいます。
メールの送信者、受信者は私のyahooメアドを指定している状態ですが、
他に、注意点や調査箇所はありますでしょうか?
SIVA
会議室デビュー日: 2005/05/25
投稿数: 9
投稿日時: 2005-10-31 16:07
えーと。
先輩方に協力を仰いで、自分のメールサーバーを立てました。
POPとSMTPサーバーの名前は一緒ですけどね。。。。
これだと、問題なく稼働しました。(前のソースでも稼働確認OKでした)

やはり、yahooの所がダメでした...でもなんでだろう。って感じです。
その代わり、SMTP認証だと全てOKでした。


1

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