2017-05-19 7 views
4

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.

smtp capture

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" 
+0

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. –

+0

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

+0

Es gibt eine Einstellung für 'SmtpClient' namens' DeliveryFormat'. Was passiert, wenn Sie "International" einstellen? 'SmtpClient.DeliveryFormat = SmtpDeliveryFormat.International' – GTHvidsten

Antwort

3

Ich glaube, ich habe die Erklärung dafür gefunden. Es scheint, dass der smtpclient eine neue Zeile nach ca. 72 Zeichen des Betreffs und des Anzeigenamens hinzufügt. Das Problem ist, dass dies nach dem Codieren der Zeichenfolge geschieht. Daher wird in einigen Fällen ein neues Zeilenzeichen in der Mitte des codierten Zeichens hinzugefügt, das afaik unzulässig ist.

Ich bin nicht sicher, warum Mandrill SMTP-Server fehlschlagen, ohne Fehler zurückzugeben, während andere SMTP-Server die Situation gut behandeln.

Jetzt, da ich verstehe, was passiert, muss ich einen Weg finden, um es zu beheben - bester Vorschlag bekommt das Kopfgeld.

Verwandte Themen