appengine电子邮件代理

appengine-mailer的Python项目详细描述


app engine mailer是一个运行在google app engine中的基于http代理的rfc2822。



google app engine提供的一个发送电子邮件的api,它允许你每天免费发送多达7000封电子邮件;高于此,每封电子邮件的费用为0.0001美元。(价格自2010年7月起正确)。


反垃圾邮件措施为避免垃圾邮件,谷歌不允许您发送任意电子邮件。有几个重要的注意事项:

1。发件人地址必须是GAE应用程序上注册开发人员的电子邮件。这是-任何你想使用的地址,你必须注册为一个开发应用程序。这将限制您从地址到50个可能的地址。(使用地址有一些限制—请参阅已知问题)

2。谷歌不允许你设置任意的标题。您可以在xxx

3查看您控制的标题列表。谷歌不会让你完全控制邮件的多部分结构。您可以有:
*纯文本电子邮件
*纯文本/html多部分/可选电子邮件
*和任意数量的附件,所有附件都将附加到邮件的结尾。

4.一条消息中可能使用的to/cc/bcc地址的数量有上限。它没有文档记录,但实际上大约是100个。


authorization
==


authorization是通过客户机和服务器之间的共享机密来处理的。每个请求都会被发送,由客户端的机密签名,并且在服务器上检查签名。服务器可以同时保留多个有效密钥,允许无缝地进行密钥更改。

服务器将在一个名为gmail_secret_key的文件中查找这些内容,每行一个键。

*可选地,您可以提供默认的发件人地址,以便在电子邮件地址不合适时使用。服务器将在一个名为gmail_default嫒sender的文件中查找该文件。

*添加了这些文件后,部署到gae。


>部署客户端
====


>可以通过三种方式使用客户端:

*直接从python程序

*从命令行,li将sendmail命令

*作为exim传输。

有时,可以指定-如果未指定,则总是返回到先在环境变量gmail_proxy_url中查找服务器url,然后在文件/etc/envdir/gmail_proxy_url中查找。类似地,它将首先在环境变量gmail_secret_key中查找密钥,然后在文件/etc/envdir/gmail_secret_key中查找密钥。

最后,由于接口是简单的http,您可以编写一个客户端来与文档化的接口进行对话。

python client
==r/>
python客户端只需要模块"gmail.py"。

]="测试"
msg.set_payload("这是消息的主体")

_url
gmail_proxy=gmailproxy(密钥,e mail_appengine_proxy_url,fail_silent=false)
尝试:
gmail_proxy.send_mail(msg)
除消息发送失败外,e:
打印"发送消息失败!\ n%s"%e

===


django 1.2起,支持交换默认电子邮件后端。将整个appengine mailer目录作为应用程序添加到您的django项目中,然后更新您的设置以包括:

email_backend='appengine_mailer.django_email_backend.gmailbackend'
email_appengine_proxy_url="http://your_domain.appspot.com"
django项目的密钥

或者,如果您的服务器配置为使用exim,您可以如下配置exim,然后使用django未经修改的电子邮件后端通过gae发送邮件。




部分替换/usr/bin/mail。除了python stdlib之外,它没有其他依赖项(使用2.6测试,应该可以使用早期版本)。有关它能理解的选项的详细信息,请使用"--help"调用它。

====


因为可以使用gmail.py代替/usr/bin/mail,所以它可以作为传输放到适当的位置,这样所有通过exim的邮件都将通过gae接口路由。(受限于谷歌有限的界面)一个示例传输显示在文件50_Exim4_Config_Gmail_Pipe中。如果您使用的是debian系统:

*将gmail.py移动到/usr/bin/gmail,并确保它是可执行的。
*将exim4配置为通过智能主机发送。
*将/etc/exim4/conf.d/transport/30-u exim4-config-u remote-smtp-u智能主机替换为50-u exim4-config-gmail-u管道。
*重新启动exim。

exim不会读取环境变量,因此这将只在/etc/envdir/gmail_proxy_url和/etc/envdir/gmail_secret_key中查找相关设置。


http interface
==

您可以通过http接口发送消息。服务器接受根url上的post,并期望post请求的主体中有两个参数。一个参数是'msg',是序列化的电子邮件消息;另一个是'signature',是消息的签名,根据python中的签名算法:

base64.encodestring(hmac.new(secret_key,msg,hashlib.sha1.digest()).strip()

如果成功,则返回204,对于客户端错误(缺少参数或签名格式不正确)返回400,否则返回500。客户端应准备好处理由于GAE停机而导致的服务器端偶尔故障;建议使用本地队列。



----



已知问题
===


*需要授权发件人地址-即,它需要与Google关联帐户,并被列为GAE应用程序的管理员。用于google邮件帐户(或用于您的域帐户的google应用程序)。检查似乎是通过严格的字符串比较完成的,而不是使用任何昵称或别名。这意味着您*无法*从以下地址发送电子邮件:
*用户名上带有+后缀的谷歌地址。
*另一地址的"昵称"地址。
*解析为谷歌组的地址。

*回复对在gmail中阅读电子邮件的人无效:请参见http://wwww.google.com/support/forum/p/gmail/thread?tid=74d00d5e2605242d&hl=en

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Frida Java windows的逆向工程   Java术语中的对象初始化   java在何处放置maven参数化junit输入xml文件   java如何在Swift中创建以日期为键、布尔值为值的字典/地图?   java Velocity动态属性访问   java Maven站点我如何找到它们?   java JavaFX按钮在显示阶段时显示为选中状态   文件io字符串方法java赋值   java为SOAP头生成证书   java Android更改EditText的setError弹出消息的背景色   java格式存储为字符串的数字   java Testcontainers+dbrider:无法清除表X,消息:启用自动提交时无法提交。,原因:无效   java程序应该可以运行,但仍然没有输出?   Java在列表末尾添加一个节点?   java类对象中的默认构造函数做什么?   java如何更快地从映射返回键和值?