Во-первых, позвольте мне сказать, Я уже знаю, что об этом спросили на Пересылка электронного письма с python smtplib .
Причина, по которой я публикую что-то настолько тесно связанное с этим вопросом, заключается в том, что я пытался использовать ответы на этот вопрос, я пытался что-то изменить, я искал в Google и безостановочно мучился с этим около 5 часов, и Я готов потратить гораздо больше времени на это
- Я просто подумал, что один из вас может иметь ответ, хотя :)
Моя проблема заключается в следующем: я пытаюсь переслать письмо из моего почтового ящика в другой почтовый ящик, и, выполняя как можно больше сценариев Python, чтобы выполнить эту простую задачу, я все еще не могу понять это.
Вот код, который я запускаю (это моя модифицированная версия того, что было опубликовано в другой форме):
import smtplib, imaplib, email, string
imap_host = "imap.gmail.com"
imap_port = 993
smtp_host = "smtp.gmail.com"
smtp_port = 587
user = "John.Michael.Dorian.4"
passwd = "mypassword"
msgid = 1
from_addr = "John.Michael.Dorian.4@gmail.com"
to_addr = "myotheremail@gmail.com"
# open IMAP connection and fetch message with id msgid
# store message data in email_data
client = imaplib.IMAP4_SSL(imap_host, imap_port)
client.login(user, passwd)
client.select()
typ, data = client.search(None, 'ALL')
for mail in data[0].split():
typ, data = client.fetch(msgid, "(RFC822)")
email_data = data[0][1]
client.close()
client.logout()
# create a Message instance from the email data
message = email.message_from_string(email_data)
# replace headers (could do other processing here)
message.replace_header("From", from_addr)
message.replace_header("To", to_addr)
print message.as_string()
# open authenticated SMTP connection and send message with
# specified envelope from and to addresses
smtp = smtplib.SMTP(smtp_host, smtp_port)
smtp.set_debuglevel(1)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(user, passwd)
smtp.sendmail(from_addr, to_addr, message.as_string())
smtp.quit()
В результате отладки SMTP говорится, что все прошло нормально, и я знаю, что оно отправляется, потому что я пытался заменить
smtp.sendmail (from_addr, to_addr, message.as_string ())
С
smtp.sendmail (from_addr, to_addr, 'test')
И все работало нормально. Он печатает message.as_string () нормально, и я в растерянности, как заставить его переслать письмо!
Это не обязательно должно быть с SMTP, IMAP или любым другим из этого кода (хотя было бы неплохо, если бы это было так), но я бы очень хотел выяснить, как это сделать.
Я знаю, что это возможно, потому что мне удалось сделать это вчера, и компьютер, на котором я работал (конечно, под управлением Windows), вышел из строя и файл исчез.
Для тех из вас, кто интересуется, почему я не просто настроил google на автоматическую пересылку, все потому, что мне нужен скрипт, который в конечном итоге переместит большое количество почты, один раз.
Спасибо всем!