메일 보내는 방법
어떤 웹 프로그램 개발에서든 이메일을 보내는 것은 전형적인 작업이며 매우 복잡하고 함정이 가득합니다. 바퀴를 발명하지 않고 이메일을 보내는 솔루션은 Swift Mailer 클래스 라이브러리의 기능을 활용하는 SwiftmailerBundle을 사용하는 것입니다. 이 번들은 Symfony Standard Edition 프레임워크에 구축되었습니다.
Configuration ¶
Swift Mailer를 사용하려면 메일 서버에서 사용할 수 있도록 구성해야 합니다.
자체 이메일 서버를 설정/사용하는 대신 Mandrill, #🎜과 같은 이메일 호스팅 제공업체를 선택할 수 있습니다. 🎜#SendGrid, Amazon SES 또는 기타 브랜드. Swift Mailer 구성에 사용되는 SMTP 서버, 사용자 이름 및 비밀번호(일반적으로 키라고 함)를 제공합니다.
구성 정보가 포함되었습니다. 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에서 가져옵니다. %mailer_transport%
),是从parameters.yml文件中所设置的参数中读出来的。你可以在那个文件中修改这些值,或是直接在这里进行设置。
下列配置属性都是可用的:
transport
(smtp
,mail
,sendmail
, orgmail
)username
password
host
port
encryption
(tls
, orssl
)auth_mode
(plain
,login
, orcram-md5
)spool
type
(如何对信息(messages)进行排序,file
或memory
都是被支持的,参考 如何滚动发送邮件)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
파일은 에 설정된 매개변수에서 읽혀집니다. 해당 파일에서 이러한 값을 수정하거나 여기에서 직접 설정할 수 있습니다.
다음 구성 속성을 사용할 수 있습니다:
transport
(< code class="notranslate">smtp,mail
,sendmail
또는gmail
)사용자 이름
비밀번호
< li>포트
암호화
(tls
또는ssl
)auth_mode
(일반
,로그인
또는cram-md5
)spool
type
(메시지 정렬 방법) ,파일
또는메모리
가 지원됩니다. 을 참조하세요. 이메일을 보내기 위해 스크롤하는 방법
호스트
경로
(상점 정보 경로)delivery_address
(모든 이메일이 전송되는 하나의 이메일 주소)disable_delivery
(이메일 전송을 완전히 끄려면 true로 설정)