如何在Symfony中使用swiftmailer使我的邮件用户名符合RFC 2822的要求?

我尝试在services.yaml中为swiftmailer设置邮件配置。

parameters:
    mailer:
        smtp_host: 'abc123.webthing.myhost.de'
        smtp_port: 587
        smtp_cert: 'tls'
        smtp_username: 'ab12345-laura'
        smtp_password: 'secret'

这就是邮件服务。

<?php

/**
 * Service that can be used to send email using basic swift mailer transport
 */

namespace App\Service;

use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

class Mailer
{
    /**
    * @var array $emailConfig
    */
    private $emailConfig;

    /**
     * Mailer constructor
     *
     * @param ParameterBagInterface $params
     */
    public function __construct(ParameterBagInterface $params)
    {
        $this->emailConfig = $params->get('mailer');
    }

    public function sendMail(array $mailInfo, string $html, array $files = [])
    {
        $emailConfig = $this->emailConfig;

        $smtpHost   = $emailConfig['smtp_host'];
        $smtpPort   = $emailConfig['smtp_port'];
        $smtpCert   = $emailConfig['smtp_cert'];
        $smtpUsername   = $emailConfig['smtp_username'];
        $smtpPassword   = $emailConfig['smtp_password'];

        $transport = (new \Swift_SmtpTransport($smtpHost, $smtpPort, $smtpCert))
            ->setUsername($smtpUsername)
            ->setPassword($smtpPassword)
        ;

        $swiftMailer = new \Swift_Mailer($transport);

        $message = (new \Swift_Message($mailInfo['title']))
            ->setFrom([$smtpUsername => $mailInfo['senderName']])
            ->setTo($mailInfo['sendTo'])
            ->setBody($html, 'text/html');

        foreach ($files as $file) {
            $message->attach(\Swift_Attachment::fromPath($file));
        }

        $swiftMailer->send($message);
    }
}

我测试了这样的代码

  /**
  * @Route("/_mailer", name="mailer", methods={"GET","POST"})
  */

  public function mailer(MailGenerator $mailGenerator, Request $request) {
    $output = $mailGenerator->sendMail();
    return $output;
  }

我得到的错误信息是:

mailbox中的地址给定[ab12345-laura]不符合RFC 2822,3.6.2。

解决方案:

问题就出在这里。

setFrom([$smtpUsername => $mailInfo['senderName']])

这需要发送邮件的人的电子邮件地址和他们的名字。你使用 $smtpUsername 作为一个电子邮件地址,但 ab12345-laura 不是一个电子邮件地址。

你需要这样的东西。

setFrom(["laura@mail.test" => "Laura Something"])

所以,你的 $mailInfo 不应该只包含一个名字,还应该包含一个用于发件人的电子邮件地址,然后使用例如

setFrom([$mailInfo['senderEMail'] => $mailInfo['senderName']])

给TA打赏
共{{data.count}}人
人已打赏
解决方案

翩翩:安卓应用安装后出现问题

2022-5-12 3:00:19

解决方案

未初始化的常量 Preferences::InstanceMethods::Preference

2022-5-12 3:00:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索