gpt4 book ai didi

gmail-api - GMail API 电子邮件退回

转载 作者:行者123 更新时间:2023-12-04 08:07:14 25 4
gpt4 key购买 nike

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

像往常一样,谷歌没有其他信息。如何解决这个问题?
        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"
]
}

最佳答案

这太疯狂了。这就是问题所在。

这条线

msg.ReplyTo = New MailAddress(FromEmail, SenderName)

无论出于何种原因(我猜当 FromEmail 和 ReplyTo 是相同的电子邮件时)都会离开 RFC2822 Reply-To参数空白。即使在 msg.ReplyTo 时该参数仍为空白被评论。毋庸置疑,GMail API 似乎存在将 Reply-To 留空的问题。绝对是一个编程错误。

所以我不得不在最终的 RFC2882 消息中做这个 hack。
inputTxt = Replace(inputTxt, "Reply-To:", "Reply-To: " & FromEmail)

它现在有效。

********* 正如下面评论中指出的,您可以使用 MailMessage.ReplyToList.Add()而不是解决这个问题。所以这里的问题是 ReplyTo Gmail API 中需要地址(即使人们可能认为 ReplyTo 应该默认为 From 电子邮件)。 **********

关于gmail-api - GMail API 电子邮件退回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com