如何在Google App Engine中检测退信邮件?
有时候因为用户输入错误,邮件会退回,没能送到收件人那里。(这是从谷歌应用引擎发送的邮件。)
那怎么才能检测到这样的邮件呢?
编辑:可能我之前的问题不太清楚:
我想知道我发送的邮件是发给哪个邮箱的,这样我可以提醒用户或者删除这个邮箱。这个问题和邮件退回的工作原理有关。通常,退回的邮件和发送的邮件不完全一样,而是带有不同的信息。有没有什么特别的标头或者其他东西可以让我知道是哪个邮箱呢?……我想我在写这些的时候已经想明白了,我把这个问题留着,希望能帮助到其他人。
我会简单地从 base64encodedrecipientemailaddress@myapp.appspot.com 发送邮件,并创建一个邮件接收处理程序。:)
还有一个问题:应用引擎(或者任何邮件服务器)允许的邮箱地址的最大长度是多少?
4 个回答
很遗憾,这个是做不到的。
GAE(谷歌应用引擎)会自动在你的邮件中添加一个叫“Return-Path”的头部信息。被退回的邮件会发送到这个头部信息里指定的地址。你不能修改这个头部信息的内容。
想了解更多细节,可以查看这个链接:http://code.google.com/p/googleappengine/issues/detail?id=1800。
其实,谷歌后来增加了一种通过HTTP请求接收退信的方法。你需要在你的app.yaml文件中添加一些内容:
inbound_services:
- mail_bounce
这样一来,每当收到退信时,就会有请求发送到 /_ah/bounce
。你可以通过添加一个处理程序来处理这些退信。想了解更多关于如何从这些请求中获取额外信息的细节,可以查看这里的处理退信通知部分。
最简单的方法是把电子邮件地址用base64或类似的编码方式处理一下,然后把它加在发件人地址前面。
所有来自something@myapp.appspotmail.com的地址在gae中都是有效的发件人地址。
只需要创建一个邮件接收处理程序,解码发件人字符串,就能得到你最初发送邮件的那个电子邮件地址。
可惜的是,本地部分的最大长度只能是64个字符。如果超过这个长度,可以考虑把电子邮件地址存储在数据存储中,然后用它的键作为邮件的本地部分。