2013-10-28 140 views
1

因此,我编写了一个简单的电子邮件服务,使用smtplib在用户首次登录时发送欢迎电子邮件。我想知道测试我的代码的最佳方式是什么。测试python smtp电子邮件服务

def send_email(nickname, email): 
    msg = MIMEMultipart('alternative') 

    config = read_config_file(MAIL_CONFIG_PATH) 
    sen = config.get('gmail_credentials', 'email') 
    pwd = config.get('gmail_credentials', 'password') 

    server = None 
    try: 
     server = smtplib.SMTP('smtp.gmail.com', 587) 
     server.ehlo() 
     server.starttls() 
     server.login(sen, pwd) 
     server.sendmail(sen, [email], msg.as_string()) 
     return 'Sent!' 

    finally: 
     if server: 
     server.quit() 

我发现,你可以使用一个假的SMTP服务器:

sudo python -m smtpd -n -c DebuggingServer localhost:25 

但是,我还是不知道我应该如何实现这样的事情在我的代码。如何更改我的API,以便在测试过程中运行SMTP服务器并连接到GMAIL服务器以进行实际调用?是否有初始化脚本会在我们的服务器上运行SMTP服务器(这将部署在AWS EC2上)。

回答

1

免责声明:我工作的产品有问题,请注意这个答案可能包含偏见。

我共同创建了一个名为Mailosaur的托管服务,允许开发人员(包括我们)在真实环境中(即通过网络使用SMTP)测试此类流程。

你得到一个SMTP端点(也是无限的测试电子邮件地址,但你使用SMTP,所以不需要这个)。

该服务然后将电子邮件转换为JSON representation,您可以通过HTTP API获取该电子邮件。

为了使查询更容易一些,可以使用客户端绑定(可用于Java,.NET和Ruby),但您可以使用常规curl或任何其他HTTP客户端(或者联系我们,我们很乐意放在一起的Python客户端)。

最后的测试过程是: -

  1. 通过SMTP发送邮件至smtp.mailosaur.in(没有必要改变从/到地址)
  2. 查询该API:

    curl https://mailosaur.com/v2/emails?mailbox={mailbox}&key={api_key} 
    
  3. 你的定期断言(伪代码):

    assert.equal(3, email.attachments.length, 'Expected 3 attachments'); 
    assert.contains('https://verify-url', email.html.links, 'Expected link to verification url'); 
    
0

我有同样的问题:发送电子邮件应用程序,我要检查他们这样做正确没有滥发一群真实的人有各种形式incompletenese的电子邮件。

我使用PostHoc它使用SMTP接收电子邮件,但只是显示在Web浏览器中发送的电子邮件。

这是在GitHub上的:https://github.com/agilepro/posthoc

这里是一个博客帖子是这样描述的:https://agiletribe.wordpress.com/2017/07/24/posthoc-testing-apps-that-send-email/

我不跑一个真正的SMTP服务器的原因是,这些服务器被设计成真正找到并将邮件发送给收件人。我想用真实的电子邮件地址和真正的邮件列表来测试应用程序。我希望看到真实情况能够得到处理,并且我想验证发送的每封电子邮件是否应该如此。我想要所有这些,但我想成为当然没有电子邮件实际交付。

多年来,我在应用程序中切换到将电子邮件重定向到不同的地址,我可以在那里看到电子邮件。但是,由于应用程序的运行方式与生产中的不同,因此这仍然存在问题。使用PostHoc,应用程序将运行,正如一样,我仍然可以安全地查看发送的所有电子邮件。

PostHoc要求TomCat运行它,但没有别的。

我喜欢5天后自动删除所有旧邮件的方式。 5天之后,我从来没有必要看到其中的一封电子邮件,所以我从来不需要对它进行清理。

相关问题