Symfony2 Swiftmailer无法发送邮件

20

我在使用Symfony2和SwiftMailer发送邮件时遇到了问题,而且我不太清楚如何调试此问题。以下是代码。首先,我创建一个要显示的表单。提交后(request-> method == post),我尝试发送电子邮件。我没有收到任何错误消息,并且被带到了感谢页面,但是我没有收到任何电子邮件。我已在生产环境和开发环境中进行了测试。在开发环境中,我在提交后打开了Profiler,它显示0封电子邮件。任何帮助都将不胜感激!谢谢!

public function contactAction(Request $request)
{
    $defaultData = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message');
    $form = $this->createFormBuilder($defaultData)
        ->add('name', 'text')
        ->add('email', 'email')
        ->add('subject', 'text')
        ->add('message', 'textarea')
        ->getForm();

    if($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $data = $form->getData();
        $message = \Swift_Message::newInstance()
            ->setSubject($data['subject'])
            ->setFrom('no-reply@mysite.com')
            ->setTo('email@mysite.com')
            ->setBody($this->renderView('AdaptiveSiteBundle:Default:email.txt.twig', array('name' => $data['name'], 'message' => $data['message'])))
        ;
        $this->get('mailer')->send($message);

        return $this->redirect($this->generateUrl('thankyou'));
    } 

    return array("form" => $form->createView());
}

1
如果您想要分析器显示已发送的电子邮件,则必须删除重定向。 - Hubert Perron
1
我还没有设置邮件服务器...有关服务器/文档的任何建议吗?我正在运行Ubuntu。 - Shawn Northrop
@ShawnNorthrop 如果没有配置邮件服务器,怎么发送电子邮件呢?最简单的建议:通过配置Swiftmail使用Gmail服务器来发送邮件。 - Flukey
邮件应该通过godaddy发送。我已经按照godaddy smtp的文档进行了设置。我不确定是否需要在本地再安装邮件服务器? - Shawn Northrop
我的问题之一是我没有看到任何日志或调试方式。我不确定是否曾经连接/请求了Godaddy。 - Shawn Northrop
我的问题是在使用测试配置时尝试从测试中发送电子邮件,该配置默认定义了“disable_delivery: true”。 - Pierre de LESPINAY
7个回答

25

你能发布parameters.yml吗?

还要确保禁用了spooling,以便可以立即发送电子邮件。 如果在Swiftmailer配置下有一个spool条目,请将其删除,例如:

swiftmailer:
    transport:%mailer_transport%
    host:%mailer_host%
    username:%mailer_user%
    password:%mailer_password%
    spool:{type:memory}

应该是:

swiftmailer:
    transport:%mailer_transport%
    host:%mailer_host%
    username:%mailer_user%
    password:%mailer_password%

谢谢,我没能看到错误(无法与主机建立连接)。 - arsenik

13

10

好教程,Gmail对我来说可以工作,但是我一直无法使用默认的localhost配置。 - Pierre de LESPINAY
它在我的本地服务器上运行正常,但在远程服务器(在线)上却无法运行,我该怎么办? - krachleur
1
检查Swiftmailer的远程服务器参数。也许您针对开发环境和生产环境有自定义参数。 - Milos Cuculovic
谢谢提供参考。只是很遗憾Symfony网站上描述的东西只有20%的时间能够正常工作。 - Kafoso

6
我经常在config_dev.yml中设置以下配置以防止在测试期间发送邮件,也许你也这样做了但忘记了吗?
如果这个设置在config_dev.yml中,请将其设置为false:
swiftmailer:
  disable_delivery:  true

不,我已经检查过了,我没有禁用。这也发生在生产环境中。 - Shawn Northrop
另一种可能性很小,但是我经常在我的Sf2日志中看不到错误,而这些错误会出现在/var/log/apache2/error.log中,你在那里看到什么了吗?(抱歉,就像我说的,几乎没有可能) - Dieter
移除重定向后,我看到一个电子邮件通过分析器被发送了。不过我仍然没有收到它。在Apache、PHP或Symfony日志中也没有任何记录。 - Shawn Northrop
抱歉,我不知道。也许尝试改用 Gmail 发送而不是 SMTP,这样您至少可以看到是否一切正常。如果是,请检查您和 GoDaddy 的 SMTP 设置。 - Dieter

5
除了上述解决方案外,我建议您从使用swiftmailer代码的函数中删除dieexit。如果您的代码正确,则可以解决您的问题。

return new Response()替换快速而不安全的die()对我有用。谢谢! - Mr. B.
感谢节省我时间。 - AbdulBasit

0

config.yml

# Swiftmailer Configuration
swiftmailer:
    transport:  smtp
    encryption: ssl
    auth_mode:  login
    host:       smtp.xx.eu
    username:   username
    password:   password 

控制器/操作

$messageObject = \Swift_Message::newInstance()
            ->setSubject('Subject')
            ->setFrom('username@xx.eu')
            ->setTo('xxx@stackoverflow.eu')
            ->setBody('message');
$this->get('mailer')->send($messageObject);

0
如果您在使用OVH、Swiftmailer和FosUserBundle时遇到了接收电子邮件的问题,请考虑在您的config.yml文件中添加以下内容。
fos_user:
    from_email:
            address:        noreply@yourdomain.com
            sender_name:    yourname

如果您不这样做,fos user bundle 将使用 noreply@exemple.com 发送电子邮件,OVH 将把其标记为垃圾邮件。
来源:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/emails.md

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接