- PR -

メール送信時のエラー取得方法

1
投稿者投稿内容
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-26 17:45
System.Web.Mail.SmtpMail.Send()にてメールを送信しているのですが、
送信先が存在しなかった場合にエラーを取得することは出来るのでしょうか?
現状は送信を実行すると一瞬で終わるのですが、メールが正しく着いたことを
確認したいのです。
送信元のほうにエラー通知(メール)は来るのですが、プログラムのほうで取得する方法が
分かりません。ネットで探しているのですが一向に見つからないため書き込みました。

もう一つ質問があるのですが
FromやToに日本名の名前を設定する方法はありますでしょうか?
javaだとmimeMessage.setFrom()などで指定することは出来たので.NETでも出来ると思い、
MailMessage.Fromプロパティなどを見たのですがそのような指定する変数が
見当たりませんでした。

自分が返信できるようなネタがなくて質問ばかりなのですがよろしくお願いします。
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2004-04-27 01:49
引用:

System.Web.Mail.SmtpMail.Send()にてメールを送信しているのですが、
送信先が存在しなかった場合にエラーを取得することは出来るのでしょうか?
現状は送信を実行すると一瞬で終わるのですが、メールが正しく着いたことを
確認したいのです。
送信元のほうにエラー通知(メール)は来るのですが、プログラムのほうで取得する方法が
分かりません。


送信時のプログラムで、ってことだと不可能ではないでしょうが、
 SMTPサーバを作成するくらいの意気込みがないと無理でしょう。
 一般的には、自身から転送が許可されているSMTPサーバに向けて送信しているので
 Send() メソッドは、そのSMTPサーバとの間までしか関与していません。

 SMTPサーバが、TOアドレスのSMTPサーバに転送しているときに、ようやく相手が存在しないことがわかるので、結果エラーメールとして通知されることになります。
(MXレコードのメールサーバがフロントエンドで、実際のアカウントが管理された
サーバへさらに転送されるのであれば、もはや不可能です。で、ほとんどはそうです。)

 SMTPサーバがやっていることを実装すれば理屈の上ではできるのですが、
 メールサーバによっては、IDENTITYを確認してくるとか
 送信ホストがSMTPポートで通信できないようであれば、受付ないとか、
 やはりSMTPサーバとして動作していないホストからの通信では、
 正常な結果を得られない可能性があります。(と思う)

 ほんとかなあ。ちょっと自信がなくなってきました。
 いい方法があれば私も知りたいです。

 SMTPサーバのローカルアカウント宛であれば、
ComExceptionのInnerException.Message プロパティで
 550 などのサーバのエラーメッセージは取れますよ。

 昔私自身が同じような問題があったときは、結局POPでエラーメールを
 拾って、正規表現などでメッセージから、エラーかどうかを判定していました。
 今では、例のウィルスのおかげで、エラーも本物かウィルスか区別しずらいですね。

きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-27 09:22
いのつちさん、夜分遅くに丁寧に答えてくださってありがとうございます。
なぜエラーが取れないかも理解できました。

プログラムではSMTPサーバに依頼をするだけでメール送信作業自体はSMTPサーバが行っているんですね。言われて納得しました。

いまメール機能がどのようなことが出来るのか調査しているところでして
『@IT:.NET TIPS 電子メールを送信するには?』にSMTPサーバを指定しなければ
「そのプログラムを実行しているWindows上で稼働するIISのSMTP機能を経由して送信される」
というようなことが書いてあったので、その場合だと拾えるのではないかと淡い期待をしたりしなかったり(5%:95%)。
まだSMTPサーバを指定するかも(メール送信を作るかも)仕様が決まってないのでなんともなのですが外部のSMTPサーバを指定するとエラーが出てしまって、とりあえず指定なしでメール機能について調べてました。
SMTPサーバを指定したときにエラーが起きる原因はユーザやパスの設定をしていないのが原因だと思っているのですが、上司に「まだ仕様が決まっていないからいいよ」と言われてユーザとパスを教えてくれないので調査は出来ません。

細かい説明ありがとうございました。これで一つ頭が良くなりました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-27 09:46
引用:

きちさんの書き込み (2004-04-27 09:22) より:
プログラムではSMTPサーバに依頼をするだけでメール送信作業自体はSMTPサーバが行っているんですね。言われて納得しました。

いまメール機能がどのようなことが出来るのか調査しているところでして
『@IT:.NET TIPS 電子メールを送信するには?』にSMTPサーバを指定しなければ
「そのプログラムを実行しているWindows上で稼働するIISのSMTP機能を経由して送信される」
というようなことが書いてあったので、その場合だと拾えるのではないかと淡い期待をしたりしなかったり(5%:95%)。


難しいのは、プログラムが直接通信しているのは自分自身で立ち上げているSMTPサーバだとしても、結局そこから先は別のSMTPサーバを経由していくという部分です。

特に、自分で立てている場合というのは、少なくとも相手のSMTPサーバの間に一段はリレーが入るのが普通です。また、相手のSMTPサーバも、最終的なところまでは何段も経由している可能性があります。

ユーザがないというのは、相手のSMTPサーバ側の都合ですから、こちらに直接的な情報を返すことは普通できません(送信側のセッションは、自分が直接通信するSMTPサーバだけで終わってしまいますから)。
※何らかの機能を使えばできる?という可能性は、私はあまり詳しくないので良く
 知りませんが、SMTPという仕組み上、普通に考えれば難しいところだと思います。
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-27 10:22
なちゃさん、返答ありがとうございます。

SMTPサーバについては基本情報レベルの知識しかもっておらず、自身のSMTPサーバでエラー検出は簡潔出来るのかも知れないと考えてしまいました。
ネットでSMTPサーバのことについて調べて読んでみると「送出して応答〜送出して応答・・」と色々やってくれていますね。
淡い期待は泡になって泡のお風呂はバブルス○ー

おかげさまで更に詳しく理解することが出来ました。


もう一つの質問のFromやToにメールアドレスだけじゃなくて表示する名前を設定する方法については出来そうなのにいまだに出来ないです。まだ調べ方が足りないのか、そんな機能は.NETにはないのか・・
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-04-27 10:53
引用:

きちさんの書き込み (2004-04-27 10:22) より:

もう一つの質問のFromやToにメールアドレスだけじゃなくて表示する名前を設定する方法については出来そうなのにいまだに出来ないです。まだ調べ方が足りないのか、そんな機能は.NETにはないのか・・


アドレスとして「"日本語名" <e-mailアドレス>」を設定するとか。
きち
常連さん
会議室デビュー日: 2003/12/17
投稿数: 41
投稿日時: 2004-04-27 15:10
ぢゃん♪さん、返答ありがとうございます。
教えていただいた方法で日本語名の設定が出来ました。

Dim message As New System.Web.Mail.MailMessage()
message.From = "アンドロ <Andro@test.co.jp>"
message.To = "梅田 <umeda@test.co.jp>"

-----
確かめたいのにメールが届かない。なぜだろうと悩んでいたのですが、
不正中継として怒られていたようです。
1

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