用Google App Engine发送邮件

标签:Google App Engine, Python

由于Google App Engine的文档很多都没翻译,所以只能自己翻译了。
以后陆续发一些翻译吧,当然,我只会写个大概方式,不会全部翻译。

正如英文文档中所说,Google App Engine提供了2种发送邮件的方式。

第一种方式是用mail API的send_mail或send_mail_to_admins函数。
前者可以发给任意邮箱,后者是发给这个应用程序的管理员(所以不用给出收件人邮箱)。这是完整的参数列表文档
必填的参数有(更进一步来说,这些参数都不能为空字符串):
sender:发信人邮箱。必须为当前登录用户或这个应用程序的管理员的邮箱。
to:收件人邮箱。有2种方式:"oo@xx.com""ooxx <oo@xx.com>"。还可以发给多个收件人,如:["oo@xx.com", "xx@oo.com"]
subject:邮件主题
body:邮件内容(纯文本)
可选参数有:
cc:抄送人邮箱。参数类型同收件人邮箱。
bcc:密送人邮箱。参数类型同收件人邮箱。
reply_to:指定收件人回复的地址(不给出时,默认是回复给发信人)
html:用html方式写的邮件内容。如果收件人的邮件客户端支持html,则显示这部分内容。但body参数不能省略,仍必须给出。
attachments:附件。它是一个由元组(tuple)组成的列表(list)。每个元组都用于描述一个附件,它们都含2个值,分别为文件名和文件内容(类型为byte string)。由于我也没发过,建议大家直接参考示例代码和支持的文件格式

下面给个简单的例子,演示怎么发邮件:
from google.appengine.api import mail
mail.send_mail('keakon@gmail.com',
	   'keakon@gmail.com',
	   u'发现红包', #中文必须写成unicode,不然会变成乱码
	   'rt',
	   html = u'<a href="http://bbs.kidfanschannel.net/discuz/plugin.php?identifier=get_money&module=money&action=money_get&hid=2">领取红包</a>')

第二种方式是用mail API的EmailMessage类
首先需要创建一个mail.EmailMessage类型的对象,再给这个参数的属性赋值(即收件人邮箱等,也可以在创建对象时就赋值),最后调用对象的send方法就可以了。对象的属性和上面send_mail的参数列表是一样的。
这种方式可以重复利用对象,只需更改对象的属性,然后调用send方法,就可以多次发送邮件。如果需要多次发送,每次只需更改稍许内容,则用这种方式比较方便。
由于Google给出了示例代码(含发信人为当前登录用户的情况),我就不自己写了。

注意:
发送过程是异步执行的,发送时只送到Google App Engine的邮件服务器(我这里显示的邮送域是apphosting.bounces.google.com)便返回(不会报告错误)。如果发送失败,发信人只会在自己邮箱收到发送失败的提示邮件,Google App Engine不会也无法对其进行错误处理。
但如果发送时参数有误(如邮件地址不合法,或少了邮件内容等),则可能会产生出现异常,这里有详细的异常列表

此外,mail API里还有检查邮箱地址是否合法的函数。

0条评论 你不来一发么↓

    想说点什么呢?