用GAE来收邮件

标签:Google App Engine, Python

虽然GAE很早就提供了发邮件的功能,但一直不支持收邮件,而只是将其写在了路线图里(原本是2009年上半年的计划,但已经明显延后了)。

由于Nick几次提到了smtp2web,所以便去试了下。

首先需要登录Google账号,然后添加域名和收邮件的url。注意该url的域名必须与邮件的域名相同(或为子域名)。
然后上传一个指定的html空文件验证域名所有权,并设置mx记录。

接下来就是接收邮件了。smtp2web会将收到的邮件POST到之前设定的url,所以需要处理那个url的post方法。
其中有2点需要注意:
1是参数,实际请求地址将类似这种,其中包含发件人和收件人:/mail?from=keakon%40gmail.com&to=keakon%40keakon.cn
2是body字段,我测试了一封标题为test,内容为哈哈~的邮件,结果如下:
Received: from mail-pz0-f176.google.com ([209.85.222.176] helo=mail-pz0-f176.google.com)
    by clamps.notdot.net with smtp2web (1.0)
    for keakon@keakon.cn; Sun, 13 Sep 2009 03:57:01 +0000
Received: by pzk6 with SMTP id 6so1746316pzk.8
        for <keakon@keakon.cn>; Sat, 12 Sep 2009 20:57:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=gamma;
        h=domainkey-signature:mime-version:received:date:message-id:subject
         :from:to:content-type:content-transfer-encoding;
        bh=m1xVV14iM+8tGj/1irpVwFPBXMmoC9McbMkE4DC2634=;
        b=XYXT1JL2f+/fTGZdK886097ryvMjLr+jHl6RJo4Z4WOaButC7wgr5gJMuIpQLSBlE7
         VhZ5qzaFt4FZyC+rPxSYOVc2uS15OPBs6vNzqFxtNr0GBPgdJJnjQ7eC/EcFYsiX7OkQ
         16q4bBR56s9+QjI8hcMW308bMvzYRm6u5dBg0=
DomainKey-Signature: a=rsa-sha1; c=nofws;
        d=gmail.com; s=gamma;
        h=mime-version:date:message-id:subject:from:to:content-type
         :content-transfer-encoding;
        b=SMRd7wGfwq0OKsNmjmf/roz/er0y24EteA+mRA7t72wkZYcXRBkvcTFrMXc7g8dC+V
         c7CZKCBFVpjovk9kdcBbTHKxdM29iyAaHG1/03Q1bFDALs1aKpdbMJUJjDQmMZIJgNdk
         D+KSE5kkW4NB98nZ4AO/tJsOjkf+UFsrInD9c=
MIME-Version: 1.0
Received: by 10.142.195.18 with SMTP id s18mr372448wff.50.1252814220216; Sat,
    12 Sep 2009 20:57:00 -0700 (PDT)
Date: Sun, 13 Sep 2009 11:57:00 +0800
Message-ID: <ad7f6140909122057y3cfc2c05m711c28220036d5f9@mail.gmail.com>
Subject: test
From: =?GB2312?B?t+fQptGp?= <keakon@gmail.com>
To: keakon@keakon.cn
Content-Type: text/plain; charset=GB2312
Content-Transfer-Encoding: base64

uf65/qGrCg==
注意Content-Type: text/plain; charset=GB2312,这里表示我需要用GB2312来解码。
接着就是处理uf65/qGrCg==了,使用base64模块是很容易处理的:
>>> from base64 import b64decode
>>> print b64decode('uf65/qGrCg==').decode('GB2312')
哈哈~
不过将整个域的邮件都交给smtp2web处理多少有点小材大用,不能与Google Apps融合,还得自己编写web端的访问…

所以看最终Google发布的API会是如何吧,我估计Google Apps仍会收到邮件,然后抄送一份post给GAE。

2条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?