【发布时间】:2023-03-24 03:06:02
【问题描述】:
我正在尝试阅读来自 gmail 帐户的所有未读电子邮件。 上面的代码可以建立连接但无法获取邮件。
我想打印每封邮件的内容。
我收到错误,因为无法将 int 连接到字节。
代码:
import smtplib
import time
import imaplib
import email
def read_email_from_gmail():
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('my_mail','my_pwd')
mail.select('inbox')
result, 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):
result, 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')
print(read_email_from_gmail())
错误:
Traceback (most recent call last):
File "C:/Users/devda/Desktop/Internship/access_email.py", line 32, in <module>
print(read_email_from_gmail())
File "C:/Users/devda/Desktop/Internship/access_email.py", line 20, in read_email_from_gmail
result, data = mail.fetch(i, '(RFC822)' )
File "C:\Users\devda\AppData\Local\Programs\Python\Python36\lib\imaplib.py", line 529, in fetch
typ, dat = self._simple_command(name, message_set, message_parts)
File "C:\Users\devda\AppData\Local\Programs\Python\Python36\lib\imaplib.py", line 1191, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "C:\Users\devda\AppData\Local\Programs\Python\Python36\lib\imaplib.py", line 956, in _command
data = data + b' ' + arg
TypeError: can't concat int to bytes
>>>
我按照here的教程学习
【问题讨论】:
-
我猜你需要
str(i)虽然我现在没有时间好好研究一下。 -
顺便说一句,该函数不会返回任何可以打印的有用信息;所以最终打印出来的只是
None。也许更好的设计是让函数return获取您提取的信息,并让调用者决定是要print()还是用它做其他事情。 -
我试过 str(i) 它给了我初始值的类型错误必须是 str 或 none ,而不是字节。
-
嗯,你在哪里改的?我的意思是
result, data = mail.fetch(str(i), '(RFC822)' ) -
是的,在那边。我应该发布回溯吗?
标签: python python-3.x smtp imaplib