4

を使用してメールを送信しようとすると、奇妙な動作が発生しますThreading.ThreadPool

これは1年以上機能していますが、最近、コンテンツのない電子メールを断続的に送信すると述べています. 宛先と件名はすべて問題ありませんが、メールの残りの部分は空白です。コードに関しては何も変更されていません (実行するサーバーへの Windows の更新を除いて)。

これが私が使用しているコードです-問題が発生している場所を絞り込む方法について誰か提案がありますか? 空のメールを受信したと主張する人にメールを再送信すると、最初に送信されたものとまったく同じコードが使用されます。

電子メールを生成するサブ:

 Public Sub EmailConfirmation(email As String,
                                 firstname As String,
                                 details As String)

        Try


            Dim embody As String = GlobalHelper.emailBody
            'static class which loads the email text at application load for use later.
            'This is a point of concern because it's obviously where the embody text is
            'is loaded, but the issue is intermittent and if there was a failure here surely
            'it would be caught by the 'try...catch' and a log of the error created (which has
            'never happened). I also ran an experiment for a while where if this string was 
            'empty then create a log entry. After receiving a complaint of a blank email
            'no error log was found.

            embody = Replace(embody, "[FirstName]", firstname)
            embody = Replace(embody, "[DATA]", details)


            'create the mail message
            Dim mail As New MailMessage()

            'set the addresses
            mail.From = New MailAddress("myemail@mydomain.com", "My Display Name")
            mail.To.Add(email)
            mail.IsBodyHtml = True

            'set the content
            mail.Subject = "Email Subject!"
            mail.Body = embody


            AddEmailToThreadPool(mail)

        Catch ex As Exception

        'if there is an error it is logged here. 

        End Try


    End Sub

ThreadPool に追加する Sub:

Private Sub AddEmailToThreadPool(email As MailMessage)
        System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf sendEmail), email)
    End Sub

メールを送信するサブ:

Private Sub sendEmail(stateinfo As Object)

        Dim email As MailMessage = CType(stateinfo, MailMessage)


        Try

            'send the message
            Dim smtp As New SmtpClient("mail.mydomain.com")
            smtp.Send(email)
        Catch ex As Exception
            'error is logged here.
        End Try

    End Sub
4

2 に答える 2

1

MSDN MailMessage クラスからコピーしました

この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。

于 2013-04-11T04:28:42.373 に答える