- PR -

[ASP.net] メール送信処理について

1
投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-03-31 11:01
WinXPで.Net FrameWork1.1とWebMatrixを使ってVBでASP開発をしています。

メール送信処理を以下のように作成しました。

Sub btnSend_Click(sender As Object, e As EventArgs)
'--Mail送信処理
Dim mailmsg As MailMessage = New MailMessage

'MailMessageの作成’
mailmsg.From = "●●●●●@ybb.ne.jp"
mailmsg.To = "●●●●●@ybb.ne.jp"
mailmsg.Subject = "(テスト)"
mailmsg.Body = txtMailFormat.Text
mailmsg.BodyFormat = MailFormat.Text

SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp"
SmtpMail.Send(mailmsg)

End Sub

結果、以下のようなエラーが発生しました(エラー全掲載です。)
転送においてサーバーに接続できませんでした。

例外の詳細: System.Runtime.InteropServices.COMException: 転送においてサーバーに接続できませんでした。


[COMException (0x80040213): 転送においてサーバーに接続できませんでした。
]

[TargetInvocationException: 呼び出しのターゲットが例外をスローしました。]
System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) +0
System.RuntimeType.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters) +473
System.Web.Mail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) +58

[HttpException (0x80004005): 'CDO.Message' オブジェクトにアクセスできませんでした。]
System.Web.Mail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) +113
System.Web.Mail.CdoSysHelper.Send(MailMessage message) +1728
System.Web.Mail.SmtpMail.Send(MailMessage message) +150
ASP.Sendmail_aspx.btnSend_Click(Object sender, EventArgs e) +119
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +83
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1277

その後、調べたところyahooMailはPOP before SMTPかSMTP-AUTHを利用しなければならないことがわかったので、以下のように修正しました。

Sub btnSend_Click(sender As Object, e As EventArgs)
'--Mail送信処理
Dim tcp As TcpClient = New TcpClient()  <--追加
Dim sw As New StreamWriter(tcp.GetStream())  <--追加
Dim mailmsg As MailMessage = New MailMessage

tcp.Connect("pop.mail.yahoo.co.jp",110)  <--追加
sw.Write("USER ▲▲▲▲\\nPASS ******\\nSTAT\\nQUIT\\n") <--追加(ここがおかしい気がしています。)

'MailMessageの作成’
mailmsg.From = "●●●●●@ybb.ne.jp"
mailmsg.To = "●●●●●@ybb.ne.jp"
mailmsg.Subject = "カウンターメール(テスト)"
mailmsg.Body = txtMailFormat.Text
mailmsg.BodyFormat = MailFormat.Text

SmtpMail.SmtpServer = "smtp.mail.yahoo.co.jp"
SmtpMail.Send(mailmsg)

End Sub

すると、今度は以下のようにタイムアウトのエラーが出ます。

例外の詳細: System.Web.HttpException: 要求がタイムアウトしました

[HttpException (0x80004005): 要求がタイムアウトしました]

とりあえず、「サーバーに接続できません」のエラーが消えたので、サーバーからの応答がないのかなという気もしますが
エラー情報が少なすぎて、原因がわかりません。
どこか、おかしいところにお気づきの方はご指導よろしくお願いします。
ちなみに、smtp.mail.yahoo.co.jpとpop.mail.yahoo.co.jpにpingを投げてみたんですが、両方ともRequest timed outが返ってきました。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-01 06:47
諸農です。

同じ状況で試したわけではないのですが、

引用:

コード:
    tcp.Connect("pop.mail.yahoo.co.jp",110)      <--追加
    sw.Write("USER ▲▲▲▲\nPASS ******\nSTAT\nQUIT\n") <--追加(ここがおかしい気がしています。)





この後に、Flush()を呼んでみてはいかがでしょうか。

また、Connect()した後のWelcomeメッセージを取得できているかどうかを
確認されてみてはいかがでしょうか。
#面倒くさいかもしれませんが、デバッグする間は1コマンドずつ、
#WriteLine()→RealLine()でレスポンスを確認してみるのもいいかもしれません。

引用:

ちなみに、smtp.mail.yahoo.co.jpとpop.mail.yahoo.co.jpにpingを投げてみたんですが、両方ともRequest timed outが返ってきました。



多くのサーバーが返さないようにしているのが実情だと思います。

ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2004-04-02 15:28
諸農さん、レスありがとうございます。

その後いろいろ試していたのですが、たいした結果を得ることが出来ず、
メール送信はとりあえず後回しになってしまいました。

また着手したら、経過を書き込みます。

どうもありがとうございました。
1

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