【发布时间】:2015-03-23 05:03:05
【问题描述】:
在 .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.
与往常一样,没有来自 Google 的其他信息。如何解决这个问题?
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
这是返回消息。如您所见,一切看起来都很好。使用 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"
]
}
【问题讨论】:
-
首先尝试让它在API Explorer 中运行,另见stackoverflow.com/a/24461102/1545993
-
API Explorer 中的结果相同。消息通过但未送达。是的,我读了那页。我正是这样做的。我的问题是,如果格式有问题,GMail API 应该抛出异常。此外,当我检查 Gmail 发送文件夹时,邮件看起来很完美。这意味着数据结构和格式很好。有没有办法与这些出色的 Google 开发人员取得联系?
-
使用示例消息,对其进行base64编码并检查,如果得到相同的结果,请先使用API Explorer运行它...
标签: gmail-api