使用 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 toinsert
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 发送电子邮件时出错
使用javascript通过google api发送邮件失败
使用javascript通过google api发送邮件失败