如何发送邮件

收藏953

阅读25467

更新时间2022-04-13

在任何Web程序开发中,发送邮件都是个经典任务,而且格外复杂、充满陷阱。不去发明轮子的一个邮件发送解决方案是,使用SwiftmailerBundle,它发挥了Swift Mailer类库的威力。这个bundle已被内置于Symfony标准版框架之中。

配置 

要使用Swift Mailer,你需要配置它以便在邮件服务器上能够使用。

有别于设置/使用你自己的邮件服务器,你可能希望选择一个邮件托管服务商比如Mandrill, SendGrid, Amazon SES或其他品牌。它们会给你提供一个SMTP服务器,用户名以及密码(一般被称为keys),这些都是要用到Swift Mailer配置中的。

在标准版Symfony的安装中,一些swiftmailer配置信息已经被包括进来:

# app/config/config.yml
swiftmailer:
    transport: '%mailer_transport%'
    host:      '%mailer_host%'
    username:  '%mailer_user%'
    password:  '%mailer_password%'
<!-- app/config/config.xml --><?xml version="1.0" encoding="UTF-8" ?><container xmlns="symfony.com/schema/dic/services" 
   xmlns:xsi="www.w3.org/2001/XMLSchema-instance"  
  xmlns:swiftmailer="symfony.com/schema/dic/swiftmailer"   
 xsi:schemaLocation="hsymfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd        symfony.com/schema/dic/swiftmailer symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd">     <swiftmailer:config 
     transport="%mailer_transport%"   
     host="%mailer_host%"  
      username="%mailer_user%"     
   password="%mailer_password%"    />
</container>
// app/config/config.php$container->loadFromExtension('swiftmailer', array(
    'transport'  => "%mailer_transport%",
    'host'       => "%mailer_host%",
    'username'   => "%mailer_user%",
    'password'   => "%mailer_password%",));

这些值(例如%mailer_transport%),是从parameters.yml文件中所设置的参数中读出来的。你可以在那个文件中修改这些值,或是直接在这里进行设置。

下列配置属性都是可用的:

  • transport (smtp, mail, sendmail, or gmail)
  • username
  • password
  • host
  • port
  • encryption (tls, or ssl)
  • auth_mode (plain, login, or cram-md5)
  • spool
    • type (如何对信息(messages)进行排序,filememory 都是被支持的,参考 如何滚动发送邮件)
    • path (存储信息的路径)
  • delivery_address (一个邮件地址,用于发送所有邮件)
  • disable_delivery (设为true即可彻底关闭邮件发送)

发送邮件 

Swift Mailer类库在工作时,依照创建、配置、然后发送Swift_Message对象来进行。“mailer”负责的是信息的真实发送,它可以通过mailer服务来得到。总地说,发送邮件相当直接了当:

public function indexAction($name){
    $message = \Swift_Message::newInstance()
        ->setSubject('Hello Email')
        ->setFrom('send@example.com')
        ->setTo('recipient@example.com')
        ->setBody(
            $this->renderView(
                // app/Resources/views/Emails/registration.html.twig
                'Emails/registration.html.twig',
                array('name' => $name)
            ),
            'text/html'
        )
        /*
         * If you also want to include a plaintext version of the message
         * 如果你同时希望包容一个“纯文本”版本的信息
        ->addPart(
            $this->renderView(
                'Emails/registration.txt.twig',
                array('name' => $name)
            ),
            'text/plain'
        )
        */
    ;
    $this->get('mailer')->send($message);     return $this->render(...);}

为了实现松耦合,邮件本体(body)被存储到一个模板中,并使用renderView()方法进行渲染。registration.html.twig模板可能像下面这样:

{
# app/Resources/views/Emails/registration.html.twig #}<h3>You did it! You registered!</h3>
 
Hi {{ name }}! You're successfully registered.
 {# example, assuming you have a route named "login" #}{# 示例,假设你有一个名为"login"的路由 #}To login, go to: <a href="{{ url('login') }}">...</a>.
 
Thanks!
 {# Makes an absolute URL to the /images/logo.png file #}{# 确保“/images/logo.png file”是一个绝对路径 #}<img src="{{ absolute_url(asset('images/logo.png')) }}">

$message对象支持许多选项,例如包容附件,添加HTML内容,等等。幸运的是,Swift Mailer在它自己的文档中涵盖了Creating Messages(创建信息)的相关内容。

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号