使用OAuth2发送电子邮件的代码Google provides在Python 2中,并且我正在尝试使用Python 3发送电子邮件。消息正文导致错误。
发送电子邮件的基本过程是:
为消息正文创建一个f字符串。
调用执行create message
的{{1}}
然后,此函数调用message = MIMEText(message_text)
...生成消息
return {'raw': base64.urlsafe_b64encode(message.as_string())}
为什么?我该如何避免抛出此错误?
下面是代码(主要来自上面链接的Google Gmail示例):
TypeError: a bytes-like object is required, not 'str'
这是跟踪:
def create_message(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())}
def send_reset_email(user):
token = user.get_reset_token()
msg = create_message(sender='me@gmail.com', to=user.email,
subject = 'Password Reset Request',
message_text = f'''To reset your password visit the following link:
{url_for('reset_token', token=token, _external=True)}
''')
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
send_message()
答案 0 :(得分:1)
尝试类似这样的方法,我认为字符串的处理方式有所不同。 其中包含有关从Py2到Py3的潜在字符串问题的一些信息,相似之处可以帮助您解决一些问题:http://python3porting.com/problems.html
message_body = "some message"
# now message_text needs this encoded string
message_text = message_body.encode('utf-8')
答案 1 :(得分:1)
从您的代码中我可以看到的是
<div class="header">
<div class="header-left">
<button>btn</button>
<span>header</span>
</div>
<button>btn</button>
</div>
<div class="container">
<div class="item">
<p>content</p>
</div>
</div>
应更改为
return {'raw': base64.urlsafe_b64encode(message.as_string())}
使用Google代码很好,但有时无法正常使用。
如果您要发送带有附件的电子邮件,则需要将最后一行更改为仅对您有帮助的额外信息。
return {'raw': base64.urlsafe_b64encode(message.as_bytes())}