Visual Studio 2005 でレガシー コードを System.Web.Mail から System.Net.Mail に更新する:電子メールの送信に関する問題

StackOverflow https://stackoverflow.com/questions/52321

質問

廃止された 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 (送信) などを使用しているのかは述べられていません。まだ実行していない場合は、送信ポートを使用することも問題の解決に役立つ可能性があります。

ウィキペディア そして rfc4409 詳細があります。

他のヒント

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")

このエラーが発生しましたが、例外がスローされたと思います。

あなたがやっていることはすべて正しいです。ここで私が確認することは次のとおりです。

  1. IIS の SMTP サービスが正しく実行されていることを再確認してください。
  2. スパムとしてフラグが立てられていないことを確認してください。

電子メールの送信に関して問題が発生した場合、通常、これらが最大の原因となります。

また、MsgBox(ex.Message)を実行していることに気づきました。Service Pack で MessageBox が asp.net で動作するのをブロックしたため、エラーが発生している可能性があります。単にあなたが気づいていないだけかもしれません。イベントログを確認してください。

メールサーバーのポート番号を追加したところ、散発的に動作するようになりました。サーバーに問題があり、メッセージの送信が遅れていたようです。ご回答ありがとうございます。どれも役に立ちました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top