*这一系列文章来源于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/

分类: web

标签: