Visual Studio 2005 でレガシー コードを System.Web.Mail から System.Net.Mail に更新する:電子メールの送信に関する問題
-
09-06-2019 - |
質問
廃止された System.Web.Mail を使用した電子メール送信は正常に機能します。コード スニペットは次のとおりです。
Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
Try
Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
Message.To = recipent
Message.From = from
Message.Subject = subject
Message.Body = body
Message.BodyFormat = MailFormat.Html
Try
SmtpMail.SmtpServer = MAIL_SERVER
SmtpMail.Send(Message)
Catch ehttp As System.Web.HttpException
critical_error("Email sending failed, reason: " + ehttp.ToString)
End Try
Catch e As System.Exception
critical_error(e, "send() in Util_Email")
End Try
End Sub
そして更新されたバージョンは次のとおりです。
Dim mailMessage As New System.Net.Mail.MailMessage()
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
mailMessage.Subject = subject
mailMessage.Body = body
mailMessage.IsBodyHtml = True
mailMessage.Priority = System.Net.Mail.MailPriority.Normal
Try
Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
smtp.Send(mailMessage)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
さまざまなバリエーションを試しましたが、何も機能しないようです。SmtpClient に関係があるのではないかと感じています。これらのバージョン間で基礎となるコードに何か変更はありますか?
スローされる例外はありません。
解決
コードをテストしたところ、メールは正常に送信されました。古いコードに同じパラメータを使用していると仮定すると、メール サーバー (MAIL_SERVER) がメッセージを受け入れていて、処理に遅延が発生しているか、メッセージをスパムとみなして破棄していると考えられます。
3 番目の方法 (勇気がある場合は Telnet) を使用してメッセージを送信し、それが成功するかどうかを確認することをお勧めします。
編集:(その後の回答から)ポートを指定することが多少は役に立ったことに注意してください。ポート 25 (SMTP) を使用しているのか、ポート 587 (送信) などを使用しているのかは述べられていません。まだ実行していない場合は、送信ポートを使用することも問題の解決に役立つ可能性があります。
他のヒント
System.Net.Mail ライブラリは設定ファイルを使用して設定を保存するため、次のようなセクションを追加するだけで済みます。
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
追加してみましたか
smtp.UseDefaultCredentials = True
送信前に?
また、次のように変更するとどうなりますか?
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
これに:
mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)
-- ケビン・フェアチャイルド
電子メールの資格情報を設定していますか?
smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")
このエラーが発生しましたが、例外がスローされたと思います。
あなたがやっていることはすべて正しいです。ここで私が確認することは次のとおりです。
- IIS の SMTP サービスが正しく実行されていることを再確認してください。
- スパムとしてフラグが立てられていないことを確認してください。
電子メールの送信に関して問題が発生した場合、通常、これらが最大の原因となります。
また、MsgBox(ex.Message)を実行していることに気づきました。Service Pack で MessageBox が asp.net で動作するのをブロックしたため、エラーが発生している可能性があります。単にあなたが気づいていないだけかもしれません。イベントログを確認してください。
メールサーバーのポート番号を追加したところ、散発的に動作するようになりました。サーバーに問題があり、メッセージの送信が遅れていたようです。ご回答ありがとうございます。どれも役に立ちました。