Wir haben ein schwieriges Problem beim Senden von E-Mails über Mandrill SMTP schlägt automatisch fehl, wenn mailFromName im folgenden Code "æ", "ø" oder "å" enthält. Die Mail wird perfekt gesendet, wenn wir ein anderes SMTP verwenden..NET Senden mit SmtpClient mit Mandrill SMTP schlägt fehl
Mail.ReplyToList.Add(New MailAddress(mailFromAddress, mailFromName, System.Text.Encoding.UTF8))
Wir verwenden die .NET-Klasse smtpClient.
Dim SmtpClient As New System.Net.Mail.SmtpClient
SmtpClient.Send(Mail)
SmtpClient.Dispose()
UPDATE
Wie in den Kommentaren vorgeschlagen, ich stimme dies wie eine Codierung Problem aussieht, aber nicht sehen kann, was ich über sie auf unserer Seite tun.
Es scheint nur auf den RepleyToList enthält æ, ø und å und nicht Mail.To
, die ich in ähnlicher Weise wie diese definieren verbunden zu werden:
Dim mTo As New MailAddress(mailToAddress, mailToName, System.Text.Encoding.UTF8)
Mail.To.Add(mTo)
mailToName
kann æ, ø und å enthalten und senden vollkommen in Ordnung.
Schwierig zu beweisen, dass etwas nicht passiert, aber ich bin sicher, dass Mails nicht gesendet werden und ich bin mir sicher, dass es mit dem Absendername in replyToList verbunden ist.
Wie ich weiß?
Ich protokolliere die E-Mails kurz vor dem Senden. E-Mails, die die fraglichen Zeichen enthalten, werden zwar protokolliert, aber nie sichtbar in https://mandrillapp.com/activity und erreichen niemals den Empfänger. Ich entferne die æ, ø oder å - alles ist in Mandrill Overview sichtbar und alles in Ordnung.
Möchten Sie meinen vollständigen Code sehen?
Hier ist es, beachten Sie, dass das Senden von Mails, die fehlschlägt, keine Ausnahmen erzeugt.
Public Sub sendMail(ByVal mailFromAddress As String, ByVal mailFromName As String, _
ByVal mailToAddress As String, ByVal mailToName As String, ByVal mailCcAddress As String, ByVal mailBCcAddress As String, _
ByVal mailPriority As Net.Mail.MailPriority, ByVal IsBodyHtml As Boolean, ByVal mailSubject As String, _
ByVal bodyPlain As String, ByVal bodyHTML As String)
Const maxtry As Integer = 3
Dim tries As Integer = 0
Dim failed As Boolean = False
' mailFromName = mailFromName.Replace("æ", "ae")
Do
tries += 1
Try
failed = False
Dim Mail As New MailMessage
If mailFromAddress <> String.Empty Then
'Mail.ReplyTo = New MailAddress(mailFromAddress, mailFromName, System.Text.Encoding.UTF8)
Mail.ReplyToList.Add(New MailAddress(mailFromAddress, mailFromName, System.Text.Encoding.UTF8))
Else
'Mail.ReplyTo = New MailAddress(Me.MailAddressFrom, Me.MailAddressDisplayName, System.Text.Encoding.UTF8)
Mail.ReplyToList.Add(New MailAddress(Me.MailAddressFrom, Me.MailAddressDisplayName, System.Text.Encoding.UTF8))
End If
Mail.From = New MailAddress(Me.MailAddressFrom, Me.MailAddressDisplayName, System.Text.Encoding.UTF8)
Mail.Sender = New MailAddress(Me.MailAddressFrom, Me.MailAddressDisplayName, System.Text.Encoding.UTF8)
If mailToAddress <> String.Empty Then
Dim mTo As New MailAddress(mailToAddress, mailToName, System.Text.Encoding.UTF8) 'UTF8
Mail.To.Add(mTo)
End If
If mailCcAddress <> String.Empty Then
Dim mCc As New MailAddress(mailCcAddress)
Mail.CC.Add(mCc)
End If
If mailBCcAddress <> String.Empty Then
Dim mBCc As New MailAddress(mailBCcAddress)
Mail.Bcc.Add(mBCc)
End If
Mail.Priority = mailPriority
Mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure
Mail.IsBodyHtml = IsBodyHtml
Mail.HeadersEncoding = Encoding.GetEncoding("utf-8")
Mail.Subject = mailSubject
Mail.SubjectEncoding = Encoding.GetEncoding("utf-8") ' = System.Text.Encoding.Default 'UTF8 'Default ' Test on all possible encodings
If IsBodyHtml Then
Mail.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(bodyHTML, System.Text.Encoding.Default, "text/html"))
End If
Mail.BodyEncoding = Encoding.GetEncoding("utf-8")
Mail.Body = bodyPlain
' Add to log
addToMailLog(mailToAddress, mailCcAddress, mailSubject, bodyPlain)
' Send
Dim SmtpClient As New System.Net.Mail.SmtpClient
'SmtpClient.ServicePoint.MaxIdleTime = 1
SmtpClient.Send(Mail)
Me._status = EMailStatus.EOkay
SmtpClient.Dispose()
Catch ex As Exception
Dim debugInfo As New CDebug("sendMail", "Try: " & tries.ToString & ", UserId: " & Me.UserId, ex.ToString, Me.UserId, String.Empty)
Me._status = EMailStatus.EMailSendError
failed = True
End Try
Loop Until (failed = False Or tries >= maxtry)
End Sub
UPDATE II
Ich habe verfolgt nun die SMTP-Kommunikation mit Wireshark. Siehe Screenshot, der die Kommunikation für eine E-Mail zeigt, die nicht zugestellt wurde und nicht in der Mandrill-Aktivitätsliste angezeigt wird - obwohl wir die SMTP-Antwort OK und die ID in der Warteschlange erhalten haben.
Ich habe drei Beispiele:
ABGEGEBEN:
mailFromName = "xxx xxxxxxxxx xxxx - xxxxxxxxxx xxxxxxx xxxxxxxxx"
nicht geliefert:
mailFromName = "xxx xxxxxxxxx xxxx - xxxxxxxxxx xxxxxxx xxxxxxæxx"
ABGEGEBEN:
mailFromName = "æxx xxxxxxxxx xxxx - xxxxxxxxxx xxxxxxx xxxxxxxxx"
Scheint offensichtlich, dass dies ein Codierungsproblem ist. Arbeiten Sie zumindest durch [diese Q + A] (http://stackoverflow.com/questions/20604551/mandrill-reject-reason-invalid-sender). Wenn das nicht hilft, dann sei * spezifisch * darüber, wie du weißt, dass die Adresse abgelehnt wurde. –
Vielen Dank für Ihren Kommentar, ich habe Ihren Link durchgesehen, aber nicht wirklich mit unserem Problem verbunden - bitte sehen Sie meine aktualisierte Frage für weitere Details. – Muleskinner
Es gibt eine Einstellung für 'SmtpClient' namens' DeliveryFormat'. Was passiert, wenn Sie "International" einstellen? 'SmtpClient.DeliveryFormat = SmtpDeliveryFormat.International' – GTHvidsten