Wo ist die PHPMailer PHP Klasse Äquivalent für Python?
Frage
i mit Python neu bin .. Eigentlich versuche ich, funktionsfähige E-Mail mit Python zu senden. Html Körpern, Text alternativem Text und den Anhang
So habe ich festgestellt dieses Tutorial und angepasst es mit der gmail-Authentifizierung (tutorial hier )
Der Code i atm haben, ist, dass:
def createhtmlmail (html, text, subject):
"""Create a mime-message that will render HTML in popular
MUAs, text in better ones"""
import MimeWriter
import mimetools
import cStringIO
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import os
out = cStringIO.StringIO() # output buffer for our message
htmlin = cStringIO.StringIO(html)
txtin = cStringIO.StringIO(text)
writer = MimeWriter.MimeWriter(out)
#
# set up some basic headers... we put subject here
# because smtplib.sendmail expects it to be in the
# message body
#
writer.addheader("Subject", subject)
writer.addheader("MIME-Version", "1.0")
#
# start the multipart section of the message
# multipart/alternative seems to work better
# on some MUAs than multipart/mixed
#
writer.startmultipartbody("alternative")
writer.flushheaders()
#
# the plain text section
#
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
pout = subpart.startbody("text/plain", [("charset", 'us-ascii')])
mimetools.encode(txtin, pout, 'quoted-printable')
txtin.close()
#
# start the html subpart of the message
#
subpart = writer.nextpart()
subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
#
# returns us a file-ish object we can write to
#
pout = subpart.startbody("text/html", [("charset", 'us-ascii')])
mimetools.encode(htmlin, pout, 'quoted-printable')
htmlin.close()
#
# Now that we're done, close our writer and
# return the message body
#
writer.lastpart()
msg = out.getvalue()
out.close()
return msg
import smtplib
f = open("/path/to/html/version.html", 'r')
html = f.read()
f.close()
f = open("/path/to/txt/version.txt", 'r')
text = f.read()
subject = "Prova email html da python, con allegato!"
message = createhtmlmail(html, text, subject)
gmail_user = "thegmailaccount@gmail.com"
gmail_pwd = "thegmailpassword"
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(gmail_user, gmail_pwd)
server.sendmail(gmail_user, "example@example.com", message)
server.close()
und das funktioniert .. jetzt nur die Anlage verpassen .. Und ich bin nicht in der Lage, die Anlage zu addieren (von dieser Post )
Also, warum ist es nicht eine Python-Klasse wie PHPMailer für php? Ist es, weil, für einen mittel können Python-Programmierer eine HTML-E-Mail mit Anhang und Alt-Text Körper zu senden ist so einfach, dass eine Klasse benötigt wird, nicht wahr? Oder ist, weil ich es einfach nicht das finden?
Wenn ich in der Lage sein werden, eine Klasse wie das geschrieben habe, wenn ich mit Python gut genug sein werden, wäre das für jemanden nützlich sein?
Lösung
Wenn Sie einige eklatante Eigenwerbung entschuldigen kann, schrieb ich ein Mailer Modul dass E-Mail mit Python ziemlich einfach macht das Versenden. Keine Abhängigkeiten anders als die Python smtplib und E-Mail-Bibliotheken.
Hier ist ein einfaches Beispiel für eine E-Mail mit einem Anhang zu senden:
from mailer import Mailer
from mailer import Message
message = Message(From="me@example.com",
To=["you@example.com", "him@example.com"])
message.Subject = "Kitty with dynamite"
message.Body = """Kitty go boom!"""
message.attach("kitty.jpg")
sender = Mailer('smtp.example.com')
sender.login("username", "password")
sender.send(message)
Bearbeiten : Hier ist ein Beispiel eine HTML-E-Mail mit alternativem Text zu senden. :)
from mailer import Mailer
from mailer import Message
message = Message(From="me@example.com",
To="you@example.com",
charset="utf-8")
message.Subject = "An HTML Email"
message.Html = """This email uses <strong>HTML</strong>!"""
message.Body = """This is alternate text."""
sender = Mailer('smtp.example.com')
sender.send(message)
Edit 2 . Dank einer der Kommentare, ich habe eine neue Version des Mailer hinzugefügt PyPI, mit dem Sie den Port in der Mailer-Klasse angeben
Andere Tipps
Django umfasst die Klasse, die Sie in Kern benötigen, docs hier
from django.core.mail import EmailMultiAlternatives
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.attach_file('/path/to/file.jpg')
msg.send()
In meinen Einstellungen habe ich:
#GMAIL STUFF
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'name@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
Ich will nur zeigen href="http://lamsonproject.org/" rel="nofollow noreferrer"> Lamson Projekt
Lamsons Ziel ist ein Ende der Hölle zu setzen, die „E-Mail-Anwendung Entwicklung“ ist. Anstatt in den 1970er Jahren stecken zu bleiben, Lamson nimmt modernes Web Application Framework Design und verwendet eine bewährte Skriptsprache (Python). Es fügt sich perfekt mit Django. Aber es ist mehr gemacht für E-Mail-basierte Anwendungen. Es sieht aus wie reine Liebe though.
Vielleicht können Sie versuchen, mit turbomail python-turbomail.org
Es ist einfacher und nützlich :)
import turbomail
# ...
message = turbomail.Message("from@example.com", "to@example.com", subject)
message.plain = "Hello world!"
turbomail.enqueue(message)
Ich empfehle das Lesen der SMTP rfc . Eine Google-Suche zeigt, dass dies kann leicht mit Hilfe der MimeMultipart Klasse erfolgen, die Sie importieren, aber nie verwenden. Hier sind einige Beispiele auf Python Dokumentation Website .