أين تكون فئة phpMailer php المكافئة لبيثون؟
سؤال
أنا جديد مع بايثون ..في الواقع، أحاول إرسال بريد إلكتروني مميز باستخدام لغة بايثون:نص HTML، والنص البديل، والمرفقات.
لذلك، لقد وجدت هذا درس تعليمي وقمت بتكييفه مع مصادقة Gmail (تم العثور على البرنامج التعليمي هنا)
الكود الموجود عندي في الصراف الآلي هو:
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()
وهذا يعمل ..الآن فقط أفتقد المرفق..ولا أستطيع إضافة المرفق (من هذا بريد)
فلماذا لا توجد فئة بايثون مثل phpMailer لـ php؟هل يرجع ذلك إلى أنه بالنسبة لمبرمج بايثون متوسط القدرة، فإن إرسال بريد إلكتروني بتنسيق html مع مرفق ونص نص بديل أمر سهل للغاية بحيث لا تكون هناك حاجة إلى فصل دراسي؟أم لأنني لم أجده؟
إذا كنت سأتمكن من كتابة فصل دراسي كهذا، عندما أكون جيدًا بما يكفي في لغة بايثون، فهل سيكون ذلك مفيدًا لشخص ما؟
المحلول
إذا كنت لا يمكن أن تبرر بعض تعزيز الذات الصارخ، كتبت الارسال وحدة أن يجعل إرسال البريد الإلكتروني مع بيثون بسيطة إلى حد ما. لم تبعيات أخرى من smtplib والبريد الإلكتروني المكتبات بيثون.
وهنا مثال بسيط لإرسال البريد الإلكتروني مع المرفقات:
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)
تعديل : في وإليك مثال بإرسال بريد إلكتروني HTML مع نص بديل. :)
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)
تعديل 2 : في وبفضل واحد من التعليقات، واضاف لقد نسخة جديدة من الإرسال إلى pypi التي تمكنك من تحديد المنفذ في فئة ميلر
نصائح أخرى
وجانغو يشمل الطبقة التي تحتاج إليها في النواة، <وأ href = "http://docs.djangoproject.com/en/dev/topics/email/#sending-alternative-content-types" يختلط = "نوفولو noreferrer" > مستندات هنا
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()
في الإعدادات لدي:
#GMAIL STUFF
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'name@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
وفقط أريد أن أشير إلى مشروع امسون حيث كان ما كنت أبحث عنه عندما وجدت هذا الموضوع. فعلت بعض مزيد من البحث والعثور عليه. انها:
<اقتباس فقرة>والهدف امسون هو وضع حد للجحيم الذي هو "البريد الإلكتروني تطوير التطبيقات". بدلا من البقاء عالقا في 1970s، امسون تتبنى تصميم إطار تطبيق الويب الحديثة ويستخدم لغة البرمجة ثبت (بايثون).
اقتباس فقرة>وأنه يدمج بشكل جيد مع جانغو. لكنه أكثر جعل التطبيقات المستندة إلى البريد الإلكتروني. يبدو أن الحب النقي بالرغم من ذلك.
ربما يمكنك أن تجرب مع com.turbmail بيثون-turbomail.org
إنه أكثر سهولة ومفيدة :)
import turbomail
# ...
message = turbomail.Message("from@example.com", "to@example.com", subject)
message.plain = "Hello world!"
turbomail.enqueue(message)
وأوصي بقراءة SMTP RFC . ويظهر البحث جوجل أن هذا يمكن بسهولة أن يتم ذلك باستخدام فئة MimeMultipart الذي تقوم باستيراده لكنها لم تستخدم. هنا بعض الأمثلة في الموقع وثائق بايثون.