- - PR -
[ASP.net] メール送信処理について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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が返ってきました。 | ||||||||||||
|
投稿日時: 2004-04-01 06:47
諸農です。
同じ状況で試したわけではないのですが、
この後に、Flush()を呼んでみてはいかがでしょうか。 また、Connect()した後のWelcomeメッセージを取得できているかどうかを 確認されてみてはいかがでしょうか。 #面倒くさいかもしれませんが、デバッグする間は1コマンドずつ、 #WriteLine()→RealLine()でレスポンスを確認してみるのもいいかもしれません。
多くのサーバーが返さないようにしているのが実情だと思います。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-04-02 15:28
諸農さん、レスありがとうございます。
その後いろいろ試していたのですが、たいした結果を得ることが出来ず、 メール送信はとりあえず後回しになってしまいました。 また着手したら、経過を書き込みます。 どうもありがとうございました。 |
1