Weiterleiten einer E-Mail mit python smtplib
Ich versuche ein Skript, das automatisch nach vorne, bestimmte E-Mails, die einem bestimmten Kriterium zu einem anderen E-Mail.
Habe ich den Download und das Parsen von Nachrichten mit imaplib und E-Mail arbeiten, aber ich kann nicht herausfinden, wie man nach vorne eine gesamte E-Mail auf eine andere Adresse. Brauche ich zum erstellen einer neuen Nachricht von Grund auf neu, oder kann ich das irgendwie ändern, das alte und neu schicken?
Hier ist, was ich bisher (client ist ein imaplib.IMAP4-Verbindung, und id eine message-ID):
import smtplib, imaplib
smtp = smtplib.SMTP(host, smtp_port)
smtp.login(user, passw)
client = imaplib.IMAP4(host)
client.login(user, passw)
client.select('INBOX')
status, data = client.fetch(id, '(RFC822)')
email_body = data[0][1]
mail = email.message_from_string(email_body)
# ...Process message...
# This doesn't work
forward = email.message.Message()
forward.set_payload(mail.get_payload())
forward['From'] = '[email protected]'
forward['To'] = '[email protected]'
smtp.sendmail(user, ['[email protected]'], forward.as_string())
Ich bin sicher, es ist etwas komplizierter, muss ich was tun, mit Bezug auf den MIME-Inhalt der Nachricht. Sicherlich gibt es einige einfache Weg, nur die Weiterleitung der gesamten Nachricht obwohl?
# This doesn't work either, it just freezes...?
mail['From'] = '[email protected]'
mail['To'] = '[email protected]'
smtp.sendmail(user, ['[email protected]'], mail.as_string())
- Es gibt zu viel Kontext fehlt hier jede Festlegung. Insbesondere sind Sie mit den standard-smtplib? Welche version von Python. Wo ist smtp initialisiert, ist es die connect () - ed? Haben Sie bekommen einen korrekten HELO Antwort?
- Es ist die standard-smtplib, python2.6.4. Die smtplib-client funktioniert Prima - ich kann senden Sie einfache text-E-Mails durch die übergabe eines string als letztes argument von smtp. Ich will einfach nur, finden eine einfache Möglichkeit, das senden der gesamten MIME-Inhalt einer übertragenen Botschaft an eine neue Adresse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass der Teil, den Sie hatten, falsch war, wie ersetzen Sie die Header in der Nachricht, und die Tatsache, dass Sie nicht brauchen, um eine Kopie der Nachricht können Sie nur betreiben, die direkt auf es Sie nach der Erstellung von raw-Daten, die Sie holte aus dem IMAP-server.
Du hast weglassen einiger Details, sodass hier meine komplette Lösung mit allen details geschrieben. Beachten Sie, dass ich bin, setzen die SMTP-Verbindung in STARTTLS-Modus, da muss ich, dass und beachten Sie, dass ich getrennt den IMAP-phase und der SMTP-phase voneinander. Vielleicht haben Sie gedacht, dass die Veränderung der Nachricht würde sich irgendwie verändern, es auf den IMAP-server? Wenn Sie haben, dies sollte Ihnen zeigen klar, dass das nicht passiert.
Hoffe, das hilft, auch wenn diese Antwort kommt ziemlich spät.
In einer Anwendung, die ich herunterladen von Nachrichten per POP3 (mit poplib) und leitet Sie mit Ihrem zweiten Methode..., die ich ändern An/Aus auf der original-Nachricht und senden Sie es, und es funktioniert.
Haben Sie versucht, stochern im inneren smtp.sendmail, um zu sehen, wo er anhält?