通过Python Gmail API发送包含双尖括号的电子邮件
我想用Python通过Gmail API发送邮件,但我总是收到以下错误信息:<HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json returned "Invalid value for .....">
我尝试了各种方法,最后发现这个错误是在我邮件中包含两个尖括号('<<'和'>>')时发生的(见例子)。我尝试了很多方法来处理这些文本,但我觉得问题可能出在我使用了'raw'这个选项……不过'raw'是谷歌示例中唯一的方式。
有没有其他方法可以通过Gmail API发送邮件?换句话说,我该怎么做才能在文本中包含尖括号并成功发送邮件呢?
谢谢!
我现在的代码如下(来自谷歌的示例代码):
import base64
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import mimetypes
import os
from apiclient import errors
(...other code...)
SendMessage(service, "me", CreateMessage("me", sender, "<<NOT OK>> " + action, "TEST!"))
(...other code...)
def SendMessage(service, user_id, message):
"""Send an email message.
Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
message: Message to be sent.
Returns:
Sent Message.
"""
try:
# print message
message = service.users().messages().send(userId=user_id, body=message).execute()
print '<mail> Message SEND (Id: %s' % message['id'] + ')'
return message
except errors.HttpError, error:
print 'An error occurred (SendMessage): %s' % error
def CreateMessage(sender, to, subject, message_text):
"""Create a message for an email.
Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
Returns:
An object containing a base64 encoded email object.
"""
print "<mail> send to: " + to
print "<mail> subject: " + subject
print "<mail> message: " + message_text
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.b64encode(message.as_string())}
1 个回答
5
你需要使用:
base64.urlsafe_b64encode(message.as_string())
这里用的是安全的URL base64 字母表,否则你的 'raw' 字段里会出现无效字符。具体可以参考:https://developers.google.com/gmail/api/v1/reference/users/messages/send