GMail-API E-Mails Bouncen
GMail-API .Net. Erstellen von Mitteilungen mit Hilfe von Net.E-Mail.MailMessage. Dann mit MimeKit zu erstellen MimeMessage (mit dieser schicken Anlage + HTML-Nachricht). Vorbei MimeMessage.ToString-zu Base64-encoder. Keine API-Fehler. Code läuft durch, ok. Ich sehe die Nachricht im Ordner gesendete Seite in GMail. Mail sieht perfekt aus (und die senden tatsächlich return message-id). Aber dann gibt es die folgenden angehängten Nachricht an diese E-mail in Gmail.
Bounce <[email protected]>
An error occurred. Your message was not sent.
Wie üblich, keine anderen Informationen von Google. Wie man dieses Problem beheben?
Dim msg = New Net.Mail.MailMessage
msg.Subject = subject
msg.To.Add(New MailAddress(ToEmail))
msg.From = New MailAddress(FromEmail, SenderName)
msg.ReplyTo = New MailAddress(FromEmail, SenderName)
msg.Body = bodyText
msg.IsBodyHtml = True
If Not String.IsNullOrWhiteSpace(fileAttachment) Then
If System.IO.File.Exists(fileAttachment) Then
Dim Attachment As New Net.Mail.Attachment(fileAttachment, "application/pdf")
msg.Attachments.Add(Attachment)
End If
End If
Dim message As MimeMessage = MimeMessage.CreateFromMailMessage(msg)
Dim newMsg = New Google.Apis.Gmail.v1.Data.Message()
newMsg.Raw = Base64UrlEncode(message.ToString)
GmailService.Users.Messages.Send(newMsg, "me").Execute()
Private Function Base64UrlEncode(ByVal input As String) As String
Dim inputBytes = System.Text.Encoding.UTF8.GetBytes(input)
'Special "url-safe" base64 encode.
Return Convert.ToBase64String(inputBytes).Replace("+", "-").Replace("/", "_").Replace("=", "")
End Function
Dies ist der return-Nachricht. Wie Sie sehen können sieht alles ok. Arbeiten mit Google-APIs ist die frustrierendste Sache.
200 OK
- Hide headers -
cache-control: no-cache, no-store, max-age=0, must-revalidate
content-encoding: gzip
content-length: 85
content-type: application/json; charset=UTF-8
date: Sat, 24 Jan 2015 05:57:21 GMT
etag: "96Z6JVARoyR8skov3RseF4DCFpA/mFWFskkdSFxyjIhRJHJuhDCBvfY"
expires: Fri, 01 Jan 1990 00:00:00 GMT
pragma: no-cache
server: GSE
vary: Origin, X-Origin
{
"id": "14b1a841e4fff910",
"threadId": "14b1a841e4fff910",
"labelIds": [
"SENT"
]
}
- versuchen Sie, es läuft in der API-Explorer erste, siehe auch stackoverflow.com/a/24461102/1545993
- Gleiche Ergebnisse in der API-Explorer. Nachricht geht durch, aber nicht geliefert. Ja, ich habe gelesen, dass Seite. Ich Tue genau das. Mein Problem ist, dass, wenn es etwas falsch in das format, GMail API haben sollte Ausnahme geworfen. Auch die E-mail sieht perfekt aus, wenn ich gehe, schauen Sie in der Gmail-gesendet-Ordner. Das bedeutet also, dass die Daten, die Struktur und die Formatierung war in Ordnung. Gibt es eine Möglichkeit, um in Kontakt mit diesen genialen Google-Entwickler?
- Verwenden Sie die Beispiel-Nachricht base64-codieren und überprüfen Sie, ob Sie das gleiche Ergebnis erhalten, bekommen Sie den ersten Lauf mit den API-explorer...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist verrückt. Das war das Problem.
Diese Zeile
aus welchen Gründen auch immer (ich Schätze, wenn FromEmail und "ReplyTo" sind die gleichen E-Mails) lässt die RFC2822 -
Reply-To
parameter leer. Der parameter bleibt leer, auch wennmsg.ReplyTo
wird kommentiert. Unnötig zu sagen, dass die GMail-API scheint Probleme mit Reply-To wird leer gelassen. Definitiv ein Programmier-bug.So, ich hatte zu tun, dass dieser hack in der letzten RFC2882 Nachricht.
Funktioniert es jetzt.
********* wie schon in dem Kommentar unten, können Sie
MailMessage.ReplyToList.Add()
statt um dieses Problem zu lösen. Also das Problem hier ist, dassReplyTo
- Adresse ist erforderlich, in die Gmail-API (auch wenn man annehmen könnte, dassReplyTo
sollte standardmäßigFrom
E-Mail). **********Reply-To
leer ist ein Problem. Aber der Grund, warum es nicht auf url-codiert base64-ist die Verwendung veralteterMailMessage.ReplyTo
. Wenn SieMailMessage.ReplyToList.Add()
anstelle, funktioniert alles einwandfrei.Nur im Fall, dass jemand stolpert über dieses und will ein C# - Antwort, hier ist das, was ich konnte, um die Arbeit mit der vorherigen Antwort als Leitfaden, mit MimeKit.