在.Net中使用GMail API.使用Net.Mail.MailMessage创建消息传递.然后使用MimeKit创建MimeMessage(使用此方法发送附件+ HTML消息).将MimeMessage.ToString传递给Base64编码器.没有API错误.代码运行正常.我可以在GMail的已发送页面中看到该消息.邮件看起来很完美(发送实际返回消息ID).但是,Gmail中的此邮件会附加以下附加消息.
Bounce <nobody@gmail.com>
An error occurred. Your message was not sent.
Run Code Online (Sandbox Code Playgroud)
像往常一样,谷歌没有其他信息.如何解决这个问题?
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
Run Code Online (Sandbox Code Playgroud)
这是返回消息.你可以看到一切看起来都不错.使用Google API是最令人沮丧的事情.
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"
]
}
Run Code Online (Sandbox Code Playgroud)
这太疯狂了。这就是问题所在。
这条线
msg.ReplyTo = New MailAddress(FromEmail, SenderName)
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因(我猜当 FromEmail 和 ReplyTo 是相同的电子邮件时)将 RFC2822Reply-To参数留空。即使msg.ReplyTo被注释,该参数仍为空白。毋庸置疑,GMail API 似乎存在将 Reply-To 留空的问题。绝对是一个编程错误。
所以我不得不在最终的 RFC2882 消息中做这个 hack。
inputTxt = Replace(inputTxt, "Reply-To:", "Reply-To: " & FromEmail)
Run Code Online (Sandbox Code Playgroud)
它现在有效。
********* 正如下面评论中所指出的,您可以使用它MailMessage.ReplyToList.Add()来解决此问题。所以这里的问题是ReplyToGmail API 中需要地址(即使人们可能认为ReplyTo应该默认为From电子邮件)。**********
| 归档时间: |
|
| 查看次数: |
12955 次 |
| 最近记录: |