Где находится эквивалент php-класса phpMailer для Python?

StackOverflow https://stackoverflow.com/questions/807302

  •  03-07-2019
  •  | 
  •  

Вопрос

я новичок в питоне..На самом деле, я пытаюсь отправить избранное письмо с помощью Python: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()

и это работает..теперь только пропустить вложение..И я не могу добавить вложение (из этот почта)

Итак, почему для php нет класса Python, такого как phpMailer?Это потому, что для программиста Python среднего уровня отправка электронного письма в формате HTML с вложением и замещающим текстовым телом настолько проста, что класс не нужен?Или это потому, что я просто не нашел?

Если я смогу написать такой класс, когда буду достаточно хорошо разбираться в Python, будет ли это кому-то полезно?

Это было полезно?

Решение

Если можно извинить за вопиющую саморекламу, я написал почтовый модуль это делает отправку электронной почты с помощью Python довольно простой.Никаких зависимостей, кроме библиотек Python 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 новую версию почтовика, которая позволяет указывать порт в классе Mailer.

Другие советы

Django включает в себя необходимый вам класс, документы здесь

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

Просто хочу указать на Проект Ламсон именно это я и искал, когда нашел эту тему.Я еще поискал и нашел.Его:

Цель Ламсона — положить конец аду «разработки приложений электронной почты».Вместо того, чтобы оставаться в 1970-х годах, Ламсон принимает современную структуру веб-приложений и использует проверенный язык сценариев (Python).

Он прекрасно интегрируется с Django.Но он больше предназначен для приложений, работающих с электронной почтой.Хотя это похоже на чистую любовь.

Может быть, вы можете попробовать с турбопочта python-turbomail.org

Это проще и полезнее :)

import turbomail

# ...

message = turbomail.Message("from@example.com", "to@example.com", subject)
message.plain = "Hello world!"

turbomail.enqueue(message)

Рекомендую прочитать SMTP-рфк.Поиск в Google показывает, что это можно легко сделать, используя класс MimeMultipart, который вы импортируете, но никогда не используете.Вот Некоторые примеры на сайте документации Python.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top