如何在Google App Engine中检测退信邮件?

3 投票
4 回答
1258 浏览
提问于 2025-04-16 00:36

有时候因为用户输入错误,邮件会退回,没能送到收件人那里。(这是从谷歌应用引擎发送的邮件。)

那怎么才能检测到这样的邮件呢?

编辑:可能我之前的问题不太清楚:

我想知道我发送的邮件是发给哪个邮箱的,这样我可以提醒用户或者删除这个邮箱。这个问题和邮件退回的工作原理有关。通常,退回的邮件和发送的邮件不完全一样,而是带有不同的信息。有没有什么特别的标头或者其他东西可以让我知道是哪个邮箱呢?……我想我在写这些的时候已经想明白了,我把这个问题留着,希望能帮助到其他人。

我会简单地从 base64encodedrecipientemailaddress@myapp.appspot.com 发送邮件,并创建一个邮件接收处理程序。:)

还有一个问题:应用引擎(或者任何邮件服务器)允许的邮箱地址的最大长度是多少?

4 个回答

2

很遗憾,这个是做不到的。

GAE(谷歌应用引擎)会自动在你的邮件中添加一个叫“Return-Path”的头部信息。被退回的邮件会发送到这个头部信息里指定的地址。你不能修改这个头部信息的内容。

想了解更多细节,可以查看这个链接:http://code.google.com/p/googleappengine/issues/detail?id=1800

3

其实,谷歌后来增加了一种通过HTTP请求接收退信的方法。你需要在你的app.yaml文件中添加一些内容:

inbound_services:
- mail_bounce

这样一来,每当收到退信时,就会有请求发送到 /_ah/bounce。你可以通过添加一个处理程序来处理这些退信。想了解更多关于如何从这些请求中获取额外信息的细节,可以查看这里的处理退信通知部分。

0

最简单的方法是把电子邮件地址用base64或类似的编码方式处理一下,然后把它加在发件人地址前面。

所有来自something@myapp.appspotmail.com的地址在gae中都是有效的发件人地址。

只需要创建一个邮件接收处理程序,解码发件人字符串,就能得到你最初发送邮件的那个电子邮件地址。

可惜的是,本地部分的最大长度只能是64个字符。如果超过这个长度,可以考虑把电子邮件地址存储在数据存储中,然后用它的键作为邮件的本地部分。

撰写回答