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
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