Python Google OAuth2 gives "TypeError: a bytes-like object is required, not 'str'"
Python Google OAuth2 gives "TypeError: a bytes-like object is required, not 'str'"
使用 OAuth2 发送电子邮件的代码 Google provides 在 Python 2 中,我正在尝试使用 Python 3 发送电子邮件。邮件正文导致错误。
发送电子邮件的基本过程是:
为消息正文创建一个 f 字符串。
调用 create message
执行 message = MIMEText(message_text)
然后这个函数调用 return {'raw': base64.urlsafe_b64encode(message.as_string())}
... 生成消息
TypeError: a bytes-like object is required, not 'str'
为什么?我怎样才能不抛出这个错误?
.
这是代码(主要取自上面链接的 Google Gmail 示例):
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()
这是踪迹:
File "C:\home\app\routes.py", line 187, in send_reset_email)
File "C:\home\app\routes.py", line 169, in create_message
return {'raw': base64.urlsafe_b64encode(message.as_string())}
File "C:\home\b\base64.py", line 118, in urlsafe_b64encode
return b64encode(s).translate(_urlsafe_encode_translation)
File "C:\home\b\base64.py", line 58, in b64encode
hencoded = binascii.b2a_base64(s, newline=False)
试试这样的方法,我认为字符串的处理方式不同。
这有一些关于从 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')
从你的代码中我能看到的是
return {'raw': base64.urlsafe_b64encode(message.as_string())}
应该改为
return {'raw': base64.urlsafe_b64encode(message.as_bytes())}
使用 google 代码很好,但有时它无法按预期工作。
而如果您要发送带附件的电子邮件,则需要将最后一行更改为可能对您有帮助的额外信息。
return {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}
使用 OAuth2 发送电子邮件的代码 Google provides 在 Python 2 中,我正在尝试使用 Python 3 发送电子邮件。邮件正文导致错误。
发送电子邮件的基本过程是:
为消息正文创建一个 f 字符串。
调用 create message
执行 message = MIMEText(message_text)
然后这个函数调用 return {'raw': base64.urlsafe_b64encode(message.as_string())}
... 生成消息
TypeError: a bytes-like object is required, not 'str'
为什么?我怎样才能不抛出这个错误? .
这是代码(主要取自上面链接的 Google Gmail 示例):
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()
这是踪迹:
File "C:\home\app\routes.py", line 187, in send_reset_email)
File "C:\home\app\routes.py", line 169, in create_message
return {'raw': base64.urlsafe_b64encode(message.as_string())}
File "C:\home\b\base64.py", line 118, in urlsafe_b64encode
return b64encode(s).translate(_urlsafe_encode_translation)
File "C:\home\b\base64.py", line 58, in b64encode
hencoded = binascii.b2a_base64(s, newline=False)
试试这样的方法,我认为字符串的处理方式不同。 这有一些关于从 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')
从你的代码中我能看到的是
return {'raw': base64.urlsafe_b64encode(message.as_string())}
应该改为
return {'raw': base64.urlsafe_b64encode(message.as_bytes())}
使用 google 代码很好,但有时它无法按预期工作。
而如果您要发送带附件的电子邮件,则需要将最后一行更改为可能对您有帮助的额外信息。
return {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}