python - 如何使这个读取电子邮件的python2函数在python3中运行?
问题描述
我一直在关注如何在 python 中阅读电子邮件的指南
https://codehandbook.org/how-to-read-email-from-gmail-using-python/
import smtplib
import time
import imaplib
import email
ORG_EMAIL = "@gmail.com"
FROM_EMAIL = "mygmail" + ORG_EMAIL
FROM_PWD = "mypassword"
SMTP_SERVER = "imap.gmail.com"
SMTP_PORT = 993
def read_email_from_gmail():
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select('inbox')
type, data = mail.search(None, 'ALL')
mail_ids = data[0]
id_list = mail_ids.split()
first_email_id = int(id_list[0])
latest_email_id = int(id_list[-1])
for i in range(latest_email_id,first_email_id, -1):
typ, data = mail.fetch(i, '(RFC822)' )
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
email_subject = msg['subject']
email_from = msg['from']
print('From : ' + email_from + '\n')
print('Subject : ' + email_subject + '\n')
这段代码是为 python2 编写的,使用 python2 运行它可以完美运行,但我想使用 python3,所以我尝试翻译代码。print foobar
首先,我更改了to的所有实例print(foobar)
。
但是我收到错误“TypeError:无法将字节连接到 int”
Traceback (most recent call last):
File "mymail.py", line 37, in <module>
read_email_from_gmail()
File "mymail.py", line 26, in read_email_from_gmail
typ, data = mail.fetch(i, '(RFC822)' )
File "/usr/lib/python3.5/imaplib.py", line 518, in fetch
typ, dat = self._simple_command(name, message_set, message_parts)
File "/usr/lib/python3.5/imaplib.py", line 1180, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/lib/python3.5/imaplib.py", line 945, in _command
data = data + b' ' + arg
TypeError: can't concat bytes to int
我对这个错误不太熟悉。但是在 python2 中使用文本中的原始代码可以完美地工作,没有任何问题。我有点理解它说它不能将字节与数字连接起来的错误。但是我不确定为什么从 python2 到 python3 会发生这个错误。
解决方案
推荐阅读
- django - 如何将数据传递给基于类的视图方法?
- ios - 如何使用其 Web-API 让 IOS 应用播放 Spotify 播放列表?
- asp.net-mvc - 地图路由不使用默认操作
- swift5 - 'withUnsafeMutableBytes' 已弃用:使用 `withUnsafeMutableBytes
- android - ic_launcher_foreground 不合适
- python - 如何打乱查询集对象字段
- angular - 如何有效地在 angular5 中使用更多 ngIf 语句?
- ocaml - 如何使用 OCaml Containers.CCIO 更改文本
- html - 伪类元素 z-index 问题
- c - 关于从 C 文件中读取字符串