如何使用Google App Engine调试服务器测试使用附件接收电子邮件

时间:2011-01-23 02:04:56

标签: java eclipse google-app-engine

我正在将Eclipse 3.6开发环境与Google Plugin for Eclipse一起使用。我创建了一个Web项目并将其配置为按照以下链接中的说明接收电子邮件。

我想测试收到附件的电子邮件。有一个电子邮件发送模拟器,如下所述。有没有人对此模拟器有更新,包括附加文件,以便我可以模拟接收带附件的电子邮件。

注意:我部署的应用会收到附件的电子邮件。我的目标是能够在测试环境中测试接收带附件的电子邮件。否则我无法单步执行代码。

http://code.google.com/appengine/docs/java/mail/receiving.html

“设置应用程序以处理传入的电子邮件后,您可以使用开发服务器控制台来模拟传入的电子邮件。您可以通过访问localhost:8888 / _ah / admin /(或者如果您的应用程序)访问开发服务器在8888以外的端口上运行,改为使用该值。在开发服务器中,单击左侧的入站邮件,填写出现的表单,然后单击发送电子邮件。“

2 个答案:

答案 0 :(得分:1)

您无法使用Google App Engine开发服务器测试带附件的电子邮件 查看this功能请求。

答案 1 :(得分:1)

我已经创建了一个python脚本来模拟发送附件:

import os, sys
import requests
import urllib2
import urlparse

from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email import Encoders

def post_mail(url, send_from, send_to, subject, text, files=[]):
    assert isinstance(files, list)

    msg = MIMEMultipart()
    msg['From'] = send_from
    msg['To'] = send_to
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach( MIMEText(text) )

    for f in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(f,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
        msg.attach(part)

    m = msg.as_string()
    print send_to
    u = urlparse.urljoin(url, "/_ah/mail/" + urllib2.quote(send_to))
    print u
    requests.post(u, data=m, headers={'content-type':'multipart/alternative'})


if __name__ == '__main__':
    if len(sys.argv) < 6:
        print >> sys.stderr, "Usage: test_mail.py urlbase fromaddr toaddr subject body file1 [..filen]"
        print >> sys.stderr, 'E.g. test_mail.py http://localhost:8080 test@example.com something@appname.appspotmail.com "Sample Subject" "Sample Body" file1.csv file2.csv'
        sys.exit(1)

    url = sys.argv[1]
    sender = sys.argv[2]
    receiver = sys.argv[3]
    subject = sys.argv[4]
    body = sys.argv[5]
    files = sys.argv[6:]

    post_mail(url, sender, receiver, subject, body, files)

app.yaml路由处理程序中,在本地开发服务器中进行测试时,可能需要注释掉login: admin的邮件路由。