Symfony 3.3 和 Swiftmailer - 由服务器延迟的控制器创建和发送的邮件

2022-08-30 19:18:11

我正在尝试使用 Swiftmailer 从网站发送电子邮件。电子邮件不断被推迟,因为Swiftmailer试图使用我的服务器的IP地址而不是localhost作为中继:

Aug  2 14:18:28 picus sm-mta[21171]: v72IIS0I021171: from=<Test@test.com>, size=347, class=0, nrcpts=1, msgid=<91d4a1a70de9fed0a2c04e682e435405@swift.generated>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Aug  2 14:18:28 picus sm-mta[21173]: v72IIS0I021171: to=<person@gmail.com>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120347, relay=example.com. [my.servers.ip.address], dsn=4.0.0, stat=Deferred: Connection refused by example.com.

我的 Symfony 控制器代码、配置和参数 -

相关控制器代码:

if ($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();

    $this->addFlash('success', 'Message sent successfully');

    $data['message'] = str_replace("\n.", "\n..", $data['message']);

    $mail = (new \Swift_Message())
        ->setSubject("[From My Website] - {$data['subject']}")
        ->setFrom($data['email'])
        ->setTo('person@gmail.com')
        ->setBody("{$data['name']} wrote the following message:\n\n{$data['message']}");

    $this->get('mailer')->send($mail);

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

config.yml:

# Swiftmailer Configuration
swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    port: '%mailer_port%'
    spool:
        type: file
        path: '%kernel.cache_dir%/swiftmailer/spool'

parameters.yml:

parameters:
    mailer_transport: sendmail
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    mailer_port: null

真正令人沮丧的是,如果我使用 创建一条消息,然后刷新假脱机(),它就会正确发送。只有当我通过控制器创建并发送消息时,才会出现问题。bin/console swiftmailer:email:sendbin/console swiftmailer:spool:send

我做错了什么?


答案 1

哎呀

是我这边的DNS错误导致了问题。也就是说,我忘了将我的MX记录指向Google的邮件服务器,因此sendmail正在获取目标地址的一部分并尝试将其用作smtp中继,即使我没有设置邮件服务器。example.com

为所有的惊愕道歉。希望我的答案对其他人用头撞墙有用。


答案 2

为什么使用发送邮件传输而不是 SMTP 传输?

https://swiftmailer.symfony.com/docs/sending.html

试试这个:

config.yml

# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    port: "%mailer_port%"
    encryption: "%mailer_encryption%"
    spool:     { type: memory }

参数.yml

parameters:
    mailer_transport: smtp
    mailer_host: smtp.office365.com
    mailer_user: user@example.com
    mailer_password: my_password
    mailer_port: 587
    mailer_encryption: tls

控制器

$message = \Swift_Message::newInstance()
            ->setSubject('Subject')
            ->setFrom(array('user@example.com' => 'My name'))
            ->setTo(array($user->getMail()))
            ->setBcc(array('copy1@example.com', 'copy2@example.com'))
            ->setBody(
                $this->renderView(
                    'template.html.twig',
                    array('vars' => $vars)
                ),
                'text/html'
            );

$this->get('mailer')->send($message);

推荐