2011-12-17 4 views
2

Прежде всего, позвольте мне сказать, Я уже знаю, что это было задано в Forwarding an email with python smtplib.Как переслать электронную почту с помощью Python

Причина, по которой я отправляю что-то настолько тесно связанную с этим вопросом, заключается в том, что я попытался использовать ответы на этот вопрос, я попытался изменить ситуацию, я искал Google и безжалостно обезумел с этим примерно 5 часов и я готов потратить гораздо больше времени на этом

- Я просто подумал, что один из вас есть ответ, хотя :)

Моя проблема заключается в следующем, я пытаюсь направить письмо от мой gmail в другой gmail, и, выполняя как можно больше скриптов 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 = "[email protected]" 
to_addr = "[email protected]" 


# 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, 'тест')

И это работало нормально. Он печатает message.as_string() в порядке, и я не понимаю, как получить его для пересылки по электронной почте!

Это не должно быть с SMTP или IMAP или любым из этого кода (хотя было бы неплохо, если бы это было так), но я действительно хотел бы выяснить, как это сделать.

Я знаю, что это возможно, потому что мне удалось это сделать вчера, и компьютер, над которым я работал (под управлением Windows, конечно), разбился, и файл исчез.

Для тех из вас, кто задается вопросом, почему я не просто устанавливаю Google для пересылки всего автоматически, это потому, что я хочу, чтобы сценарий, который в конечном итоге переместил бы большой объем почты, один раз.

Спасибо всем!

+0

Пройдите через свой код в отладчике. Когда вы переходите к строке 'sendmail', проверьте значения ваших локальных переменных, чтобы убедиться, что они вам нужны.Если это не сработает, добавьте смежную строку, которая отправит фиктивное сообщение и посмотрит, работает ли это. (FWIW, что код выглядит нормально на первый взгляд.) – katrielalex

+0

Спасибо за предложение, я сделал оба из них, фиктивная линия отлично работала и отправила строку с надписью «test» –

ответ

0

Более чем вероятно, что заголовки Received из исходного письма вызывают сообщение gmail. Попробуйте удалить все из них перед отправкой.

Если это не исправить, распечатайте заголовки и скопируйте их, чтобы удалить все те, которые обычно не были в новом сообщении.

Однако зачем двигаться вперед? Было бы проще просто вытащить из одной учетной записи IMAP и напрямую перенаправить ее на другую учетную запись IMAP.

Фактически вы можете использовать Mozilla Thunderbird для добавления обеих учетных записей и просто перетаскивать сообщения от одного к другому.

+0

Не могли бы вы рассказать о том, как «с одной учетной записи IMAP и прямо нажимать на другую учетную запись IMAP "? Я делаю это так, потому что это все, что я мог найти в «пересылке gmail с помощью python». Спасибо за вашу помощь! –

+0

Откройте два соединения IMAP, по одному для каждой учетной записи. Используйте .fetch() в одном соединении, чтобы получить сообщение и .append() на другом, чтобы добавить его ко второй учетной записи. Кстати, вы могли бы просто использовать Mozilla Thunderbird для добавления обеих учетных записей и перетаскивания сообщений между ними! –

+0

Большое вам спасибо! Вы, как мой спаситель, здесь человек, спасибо! IMAP.append() работает как шарм, сохраняя оригинальные заголовки в такт и все такое! –

Смежные вопросы