使用 Google API 发送邮件时出错 - “'原始' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息”

Posted

技术标签:

【中文标题】使用 Google API 发送邮件时出错 - “\'原始\' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息”【英文标题】:Error sending mail with Google API - "'raw' RFC822 payload message string or uploading message via /upload/* URL required"使用 Google API 发送邮件时出错 - “'原始' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息” 【发布时间】:2016-10-30 03:22:03 【问题描述】:

我正在尝试通过 Python 中的 Google API 发送消息,并尝试运行一个几乎直接取自 Google example page 的示例。

def CreateMessage(sender, to, subject, message_text):
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    return 'raw': base64.urlsafe_b64encode(message.as_string().replace('message','resource').encode('ascii'))

但是当我尝试发送它时

    message = CreateMessage(sender, to, subject, message_text)
    message = service.users().messages().send(body=list(message),userId='me').execute()

我收到错误消息:“'raw' RFC822 payload message string or uploading message via /upload/* URL required”

从其他帖子看来,Google 正在等待附件。 MIMEText 是否有问题使其期望出现问题,如果是,我该如何解决?

【问题讨论】:

消息有多大? 即使我把字符串留空,或者几十行,我仍然得到错误。 检查这个 SO 问题 Failed sending mail through google api with javascript 和 How to insert a full format message using the Gmail API? 如果它可以帮助你。 我也收到了你的错误,并成功地回答了这个问题 【参考方案1】:

list(message) 不是必需的,它为 API 提供了以下内容:

["raw": "b64 content..."]

只是做:

...messages().send(body=message, userId='me'...

【讨论】:

我没有使用 'list' 并收到相同的错误消息。【参考方案2】:

请尝试以下方法:

msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = to
msg.attach(MIMEText(message_text, 'plain'))
return 'raw': base64.urlsafe_b64encode(msg.as_string().encode()).decode()

【讨论】:

以上是关于使用 Google API 发送邮件时出错 - “'原始' RFC822 有效负载消息字符串或通过 /upload/* URL 上传消息”的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Java 中使用 Gmail API 发送电子邮件时出错

通过Sendgrid API发送电子邮件时出错

使用javascript通过google api发送邮件失败

使用javascript通过google api发送邮件失败

在 PHP 中发送请求 Google Cloud Messaging 时出错

使用 Mandrill (php) 发送电子邮件时出错