3

私はpythonを初めて使用します..実際、私は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()

そして、それは機能します..今は添付ファイルを見逃すだけです..そして、添付ファイルを追加できません(この投稿から)

では、なぜ phpMailer for php のような python クラスがないのでしょうか? 中程度の Python プログラマーにとって、添付ファイルと代替テキスト本文を含む HTML メールを送信するのは非常に簡単で、クラスは必要ないからですか? それとも私が見つけられなかったからですか?

私がそのようなクラスを書くことができれば、私がPythonに十分慣れたときに、それは誰かにとって役に立ちますか?

4

5 に答える 5

6

露骨な自己宣伝を許せば、Pythonでメールを送信するのをかなり簡単にするメーラーモジュールを作成しました。Pythonsmtplibと電子メールライブラリ以外の依存関係はありません。

添付ファイル付きのメールを送信する簡単な例を次に示します。

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:コメントの1つに感謝し、Mailerクラスでポートを指定できる新しいバージョンのmailerをpypiに追加しました。

于 2009-04-30T16:56:26.433 に答える
3

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
于 2009-04-30T15:22:33.367 に答える
2

このスレッドを見つけたときに探していたLamsonProjectを指摘したいと思います。もう少し検索して見つけました。これは:

Lamsonの目標は、「電子メールアプリケーションの開発」という地獄に終止符を打つことです。Lamsonは、1970年代にとどまるのではなく、最新のWebアプリケーションフレームワーク設計を採用し、実績のあるスクリプト言語(Python)を使用しています。

Djangoとうまく統合されます。しかし、それは電子メールベースのアプリケーション向けに作られています。でもそれは純粋な愛のように見えます。

于 2010-02-16T21:18:21.090 に答える
0

SMTPrfcを読むことをお勧めします。グーグル検索は、これはあなたがインポートしているが決して使用していないMimeMultipartクラスを使用することによって簡単に行うことができることを示しています。Pythonのドキュメントサイトにいくつかの例があります。

于 2009-04-30T15:00:06.963 に答える