jobeet第十六天:邮件

*这一系列文章来源于Fabien Potencier,基于Symfony1.4编写的Jobeet Tutirual

昨天我们为Jobeet添加一个只可读的(read-only)web service。现在用户可以申请Affiliate账户了,但是他们需要被管理员激活后才能够使用。为了affiliate能给拿到他们的token,管理员需要发送邮件来通知他们。这些就是我们今天要实现的功能。

Swift Mailer

Symfony框架捆绑了最好的PHP邮件解决方案:Swift Mailer。当然,Symfony已经完全地集成了这个库,并且在它原有的功能上添加了一些很酷很好用的功能。我们开始工作吧,我们通过发送邮件给用户通知他们已被管理员激活了,并且告诉他们对应的token是多少。但在那之前,我们需要配置我们的环境:

为了让上面的配置能够起作用,你应该把mailer_usermailer_password修改成真实的值。

app/config/parameters_test.yml文件做同样的修改。

修改完这两个文件之后清除test环境和development环境下的缓存:

因为我们把mailer_transport设置为gmail,所以你需要使用google的邮箱地址来作为mailer_user的值。

我们可以想想,平时发送一个邮件的时候,我们都会在邮箱客户端进行哪几步操作呢?我们会填写邮件主题,填写接收人,填写要发送的信息内容。

为了发送邮件,我们需要:

  • 调用Swift_messagenewInstance()方法(通过Swift Mailer的官方文档可以学习到这个对象)
  • 通过setFrom()方法来设置发送者的地址
  • 通过setSubject()方法来设置邮件的主题
  • 通过setTo()setCc()setBcc()之一来设置接收者
  • 通过setBody()方法设置邮件内容

用下面的代码替换activateAction()

发送邮件很简单,我们只需给mailer实例的send()方法传递一个message对象作为参数即可。

对于邮件的内容,我们创建了一个email.txt.twig文件,它准确地包含了我们想通知给affilate的内容。

现在我们也为batchActionActivate添加发送邮件的功能,尽管一次性同时选择多个affiliate账户同时激活,他们也能够接收到邮件:

 

测试

我们已经看到了怎么样使用Symfony来发送邮件,现在我们来写一些功能测试以确保它们能正确地工作。

为了测试新功能,我们需要进行登录。为了登录,我们需要用户名和密码。我们来创建先的fixture文件,在这个文件中添加admin用户:

在测试中,我们会使用分析器(profiler)中为swiftmailercollector来得到上一个请求中的邮件发送信息。现在我们来添加一些代码检查邮件是否正确发送:

如果你现在运行测试将会得到错误。为了防止错误发生,我们需要确保config_test.yml文件中的profiler在测试环境里是开启的。如果它被设成fasle,请设成true:

清除缓存后运行测试命令,哈哈,好好享受green bar吧:

 

 

原文链接:http://www.intelligentbee.com/blog/2013/08/24/symfony2-jobeet-day-16-the-mailer/

One comment

发表评论