Bai*_*aig 1 php email swiftmailer symfony
在花了两天试图让它工作后,我终于决定在这里问.我试图在用户提交联系表单后生成一封电子邮件,在阅读Symfony 网站上的文档和无数其他关于stackoverflow和google的文章后,我无法让它工作.看看它看起来应该是非常简单的指令,但没有一个解决方案正在发挥作用.我尝试通过Gmail和我们公司的SMTP发送电子邮件,但两者都无效
这是我的最新消息 parameters.yml
swiftmailer:
transport: smtp
username: username (confirmed that i am entering it right)
password: password (confirmed that i am entering it right)
host: mail.domain.com
port: 26
auth_mode: login
Run Code Online (Sandbox Code Playgroud)
上面的设置没有给出任何错误,它只是提交表单并显示成功消息但没有收到邮件
我甚至尝试过使用Gmail之类的其他几个组合,但这会返回用户身份验证错误,我一遍又一遍地确定我输入正确的登录详细信息并且100%确定它们是正确的,因为通过浏览器我可以登录.
config.yml:
swiftmailer:
transport: %mailer_transport%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
host: %mailer_host%
username: %mailer_username%
password: %mailer_password%
spool: { type: memory }
Run Code Online (Sandbox Code Playgroud)
parameters.yml:
mailer_transport: smtp
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_username: myusername@gmail.com
mailer_password: mypassword
Run Code Online (Sandbox Code Playgroud)
这就是我的控制器生成电子邮件的样子
public function indexAction(Request $request)
{
$enquiry = new Enquiry();
$form = $this->createForm(new EnquiryType(), $enquiry);
$form->handleRequest($request);
if ($form->isValid()) {
$message = \Swift_Message::newInstance()
->setSubject('Contact enquiry')
->setFrom('username@domain.com')
->setTo('username@domain.com')
->setBody(
$this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry))
);
//print_r($message);
$this->get('mailer')->send($message);
$this->get('session')->getFlashBag()->add(
'notice',
'Your contact enquiry was successfully sent. Thank you!'
);
return $this->redirect($this->generateUrl('contact_form'));
}
return $this->render(
'ContactBundle:Default:contact.html.twig',
array(
'form' => $form->createView()
)
);
}
Run Code Online (Sandbox Code Playgroud)
如果我能在这里得到一些帮助,我将非常感激,因为我现在完全无能为力.
我让它在基于公司的SMTP和Gmail上工作
对于公司SMTP
config.yml:
swiftmailer:
transport: %mailer_transport%
encryption: %mailer_encryption%
auth_mode: %mailer_auth_mode%
host: %mailer_host%
username: %mailer_username%
password: %mailer_password%
spool: { type: memory }
Run Code Online (Sandbox Code Playgroud)
parameters.yml:
mailer_transport: smtp
mailer_host: mail.domain.com
mailer_user: username@domain.com
mailer_password: password
Run Code Online (Sandbox Code Playgroud)
对于Gmail config.yml设置保持不变,但parameters.yml进行以下更改
mailer_transport: gmail
mailer_host: smtp.gmail.com
mailer_user: username@gmail.com
mailer_password: password
Run Code Online (Sandbox Code Playgroud)
然后访问谷歌的这个链接,允许应用程序登录到您的帐户发送邮件.您还可以使用此链接查看任何可疑的登录活动
注意:
在您的控制器中,您告诉发送电子邮件的功能->setFrom('username@gmail.com')应该与生成电子邮件的电子邮件ID匹配,否则您将不会收到电子邮件,我看了这个并浪费了2天.
$message = \Swift_Message::newInstance()
->setSubject('Contact enquiry')
->setFrom('username@gmail.com') \\match this to mailer_user in parameters.yml
->setTo('username@gmail.com')
->setBody(
$this->renderView('ContactBundle:Default:contactEmail.txt.twig', array('enquiry' => $enquiry))
);
Run Code Online (Sandbox Code Playgroud)
这就是我如何工作:)最后,希望这将有助于那里的人卡住.我可以确认这个解决方案在开发和生产服务器上都适用于我.