Я следовал здесь руководству о том, как читать электронные письма в 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
на print(foobar)
.
Однако я получаю сообщение об ошибке 'Ошибка типа: не удается объединить байты в 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.