在Symfony 3中使用来自localhost的Gmail发送电子邮件

时间:2017-04-26 08:06:25

标签: php symfony phpmailer swiftmailer

我最近遇到问题,我无法使用带有Swiftmailer的Symfony 3中的本地主机发送任何邮件

这是我在parameters.yml中的设置

mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: xxxx@gmail.com
mailer_password: xxxxx
mailer_encryption: tls
mailer_port: 587

以下是config_dev.yml设置

swiftmailer:
    transport: gmail
    username:  '%mailer_user%'
    password:  '%mailer_password%'

和示例代码

/**
 * @Route("/mail/{name}")
 */
public function mailAction($name)
{

    echo 'tete';

    $message = \Swift_Message::newInstance()
        ->setSubject('Hello Email')
        ->setFrom('konrad@mydomain.de')
        ->setTo('info@mydomain.de')
        ->setBody(
            $this->renderView(
            // app/Resources/views/Emails/registration.html.twig
                'email/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('main/homepage.html.twig');
}

在我尝试发送一些测试邮件之后,邮件只会被假脱机,而且我没有看到任何错误或类似信息。

此外,我已经使用PHPMailer在本地测试了上面的设置,并且在该库中,发送按预期工作。

当我在本地工作时,是否需要设置更多内容?

2 个答案:

答案 0 :(得分:1)

Gmail传输只是一种使用SMTP传输的快捷方式 并设置这些选项:

Option   Value 
 encryption  ssl
 auth_mode login 
 host   smtp.gmail.com

您已经理解了错误的方法,因为您定义传输SMTP参数但实际上并未使用它,因为配置会查找Symfony自动使用Gmail SMTP默认值配置的Gmail传输,并且您只需要提供用户名和密码在参数中。

# app/config/config_dev.yml 
swiftmailer: 
     transport: gmail 
     username: '%mailer_user%' 
     password: '%mailer_password%'

%mailer_user%%mailer_password%预计将在

中定义
# app/config/parameters.yml 
parameters:
# ...
mailer_user: your_gmail_username
mailer_password: your_gmail_password

我认为您没有正确配置,因为parameters.yml没有mailer_usermailer_password,如果它确实覆盖了Symfony使用的Gmail默认设置,或者不对。 无论哪种方式,请查看配置并仅填写适当的值。

另外phpmailer也无关紧要,Symfony使用Swift邮件程序。它与phpmailer一起工作,因为你可能正确设置了参数,但是如果配置错误,则Swift邮件程序会读取配置.yml以生成传输对象,传输对象值将是错误的。

答案 1 :(得分:0)

(代表OP发布)

上面的代码按预期工作。即使没有指定加密或端口甚至主机。邮件到达我的邮箱,但是被我的SpamAssassin设置过滤了。问题解决了。很抱歉从无到有问题:)