电子邮件实用程序
iw.email的Python项目详细描述
内容
What is iw.email ?
提供生成电子邮件的干净方法。
How to use iw.email ?
有多种方法可以使用iw.email。见下文。
MultipartMail
包的基类是multipartmail。你可以用它来 使用正确的编码以HTML或文本格式生成电子邮件。
我们需要一些html作为电子邮件正文:
>>> umail = unicode('''<html><body> ... corps du maiil avec caractère unicode: ... utf-8: é à î ö ... cp552: \xe2\x80\x93 \xe2\x80\x99 ... </body></html>''', 'utf-8')
以及一个smtp服务器:
>>> from smtplib import SMTP >>> server = SMTP('localhost')
现在我们可以使用multipartmail类生成电子邮件:
>>> from iw.email import MultipartMail >>> mail = MultipartMail(html=umail, ... mfrom='sender@ingeniweb.com', ... mto='recipient@ingeniweb.com', ... subject=unicode('sujèéèt','utf-8'))
然后发送:
>>> server.sendmail('sender@ingeniweb.com','recipient@ingeniweb.com', str(mail)) Content-Type: multipart/related; charset="iso-8859-1"; ... MIME-Version: 1.0 To: recipient@ingeniweb.com From: sender@ingeniweb.com Subject: =?iso-8859-1?q?suj=E8=E9=E8t?= ... Content-Type: multipart/mixed; charset="iso-8859-1"; ... Content-Type: text/html; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable <BLANKLINE> <html><body> corps du maiil avec caract=E8re unicode: utf-8: =E9 =E0 =EE =F6 = <BLANKLINE> cp552: - ' </body></html> ...
好吧,这很酷,但有时我们想添加图像。 所以,就这样做:
>>> image = open(os.path.join(testdir, 'bullet.gif')) >>> image.read() 'GIF89a\x05\x00\r\x00\x80\x00\x00c\x8c\x9c\xff\xff\xff!\xf9\x04\x01\x00\x00\x01\x00,\x00\x00\x00\x00\x05\x00\r\x00\x00\x02\t\x8c\x8f\xa9\xbb\xe0\x0f\xa3\x84\xa9\x00;' >>> image.seek(0) >>> mail.addImage(image, filename='bullet.gif') >>> mail.images [<email...MIMEImage instance at ...>] >>> print mail.images[0].as_string() Content-Type: image/gif; name="bullet.gif" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-ID: <bullet.gif> <BLANKLINE> R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4SpADs=
CheetahMail
我们还可以使用Cheetah模板生成电子邮件:
>>> from iw.email import CheetahMail
path是指向cheetah模板的路径:
>>> path = os.path.join(testdir, 'mail.tmpl') >>> print open(path).read() ========== $title ========== <BLANKLINE> $paragraph <BLANKLINE>
我们需要几个参数:
>>> umail = unicode(''' ... corps du maiil avec caractère unicode: ... utf-8: é à î ö ... cp552: \xe2\x80\x93 \xe2\x80\x99 ... ''', 'utf-8')
然后我们可以使用猎豹邮件从模板生成电子邮件:
>>> mail = CheetahMail(path=path, ... title='nice title', ... paragraph=umail, ... mfrom='sender@ingeniweb.com', ... mto='recipient@ingeniweb.com', ... subject=unicode('sujèéèt','utf-8')) >>> server.sendmail('sender@ingeniweb.com','recipient@ingeniweb.com', str(mail)) Content-Type: multipart/related; charset="iso-8859-1"; ... To: recipient@ingeniweb.com From: sender@ingeniweb.com ... <body> <div class=3D"document" id=3D"nice-title"> <h1 class=3D"title">nice title</h1> <p>corps du maiil avec caract=E8re unicode: iso-8859-1: =E9 =E0 =EE =F6 cp552: - '</p> </div> </body> </html> <BLANKLINE> ...
Testing framework
电子邮件提供了一个测试框架。
您只需要使用iw.email.testing.smtpsetup()和 在测试用例中使用iw.email.testing.smtpteardown()。
这将修补smtplib以允许您在doctests中测试电子邮件发送 就像你在这个文件里看到的一样。
您还可以设置一些环境变量来发送生成的电子邮件。 这是允许的变量:
TEST_MAIL: the recipient TEST_MAILFROM: mail from address (default to test@ingeniweb.com) TEST_MAILHOST: hostname of an smtp server (default to localhost) TEST_MAILPORT: smtp port (default to 25)
如果设置了测试邮件,测试框架将尝试向其发送电子邮件。 因此,如果您有本地SMTP服务器,您只需要使用此命令:
$ TEST_MAIL=gael@ingeniweb.com python setup.py test
Changes
1.4 (2009-08-01)
- add EmailTestCase [gawel]
1.3 (2008-11-28)
- add MakoMailTemplate [gawel]
- allow to use a custom file like object for output in testing [gawel]
1.2 (2008-04-17)
- need str(mail) in doctests [gawel]
1.1
- raise an explicit message when no mail are provide [gawel]
0.1
- initial version created by IngeniSkel