标签: symfony-mailer

Monolog:通过邮件发送错误日志会导致每个发送的错误都会收到一封额外的邮件

对于通过邮件发送的每个错误日志,我们都会收到另一封额外的电子邮件,其中包含 2 行 smtp 调试日志消息。

  • 新创建的 symfony 演示 ( symfony new --demo)
  • 配置独白以通过邮件发送错误消息,如文档中所示
  • symfony/monolog 捆绑包3.7.0
  • Symfony版本5.2.1// 5.2.9,5.3.0-RC1
  • PHP 7.4.13
# config/packages/prod/monolog.yaml
monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: critical
            handler:      deduplicated
        deduplicated:
            type:    deduplication
            handler: symfony_mailer
        symfony_mailer:
            type:       symfony_mailer
            from_email: 'error@example.com'
            to_email:   'error@example.com'
            subject:    'An Error Occurred! %%message%%'
            level:      debug
Run Code Online (Sandbox Code Playgroud)

Monolog 按预期发送错误消息,但每封邮件后面都会跟着第二封包含以下内容的邮件:

[2021-05-26T10:49:47.683298+02:00] app.DEBUG: Email transport "Symfony\Component\Mailer\Transport\Smtp\SmtpTransport" stopping [] []
[2021-05-26T10:49:47.722980+02:00] app.DEBUG: Email transport "Symfony\Component\Mailer\Transport\Smtp\SmtpTransport" stopped [] []
Run Code Online (Sandbox Code Playgroud)
  • devtest环境中没有额外的邮件
  • test: true …

php symfony monolog symfony-mailer

11
推荐指数
1
解决办法
1294
查看次数

在 Laravel 9 上找不到“Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory”类

我只是想使用 Mailgun 从我的 Laravel 项目发送电子邮件,并按照官方文档中的步骤进行操作:https ://laravel.com/docs/9.x/mail#mailgun-driver

composer require symfony/mailgun-mailer symfony/http-client

当我尝试发送密码重置电子邮件来测试它时,它会抛出异常:

Class "Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory" not found

这是完整的堆栈跟踪:https ://flareapp.io/share/oPRKqyZ7#share

我不知道,但也许是因为这个项目最初是 Laravel 8 项目,一周前我将其更新到 Laravel 9。它是否试图在应用程序目录中找到 Laravel 9 附带的东西或其他东西,但我的项目没有?我不明白。

顺便说一句,如果有帮助的话;该项目使用 Jetstream 以及 Inertia.js 和 Vue.js。所以composer.json现在看起来像这样:

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^8.0.2",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.2",
        "inertiajs/inertia-laravel": "^0.5.4",
        "laravel/framework": "^9.2",
        "laravel/jetstream": "^2.4",
        "laravel/octane": "^1.0",
        "laravel/sanctum": "^2.14.1",
        "laravel/tinker": "^2.7",
        "sentry/sentry-laravel": "^2.11",
        "symfony/http-client": "^6.0",
        "symfony/mailgun-mailer": "^6.0",
        "tightenco/ziggy": "^1.0"
    },
    "require-dev": …
Run Code Online (Sandbox Code Playgroud)

laravel mailgun symfony-mailer

11
推荐指数
2
解决办法
8855
查看次数

如何使用 Symfony Mailer 组件禁用“verify_peer”?

我正在配置一个带有自签名证书的邮件服务器(后缀),而且这个自签名证书似乎是 Symfony Mailer 组件的一个问题。

在 Swiftmailer 上,使用一些配置,例如:

transport:
    stream_options:
        ssl:
            allow_self_signed: true
Run Code Online (Sandbox Code Playgroud)

或者

stream_options:
    ssl:
        verify_peer: false
        verify_peer_name: false
Run Code Online (Sandbox Code Playgroud)

可能会修复它,但我找不到在邮件程序上执行此操作的方法(如果可能,我想使用 YAML 配置文件)。

php symfony symfony4 symfony-mailer

10
推荐指数
2
解决办法
4299
查看次数

如何使用动态连接参数使用 Symfony Mailer 发送邮件?

我正在尝试发送带有动态 SMTP 连接参数的电子邮件。这些参数将从数据库中检索。因此,按照官方文档中的说明指定文件中的参数.env(例如MAILER_DSN=smtp://user:pass@smtp.example.com:port:)或在文件中定义多个传输不符合我的要求。.yaml

如何以编程方式发送定义邮件传输的电子邮件?例如,我想做:

// I'd like to define $customMailer with some data retrieved from DB

$email = (new TemplatedEmail())
    ->from(new Address('example-from@example.com', 'Example'))
    ->to('example-to@example.com')
    ->subject('Subject')
    ->htmlTemplate('emails/my-template.html.twig')
    ->context([]);

$customMailer->send($email);
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-mailer

6
推荐指数
1
解决办法
3155
查看次数

通过 aws ses 从 symfony 邮件程序发送电子邮件时出错

我的适合发送电子邮件的控制器如下所示:

class MailerController extends AbstractController
{
    /**
     * @Route("/email")
     */
    public function sendEmail(MailerInterface $mailer): Response
    {
        $email = (new Email())
            ->from('hello@example.com')
            ->to('you@example.com')
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')

        $mailer->send($email);

        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

访问后/email我收到以下错误:

Failed to authenticate on SMTP server with username "XXX" using the following authenticators: "LOGIN", "PLAIN". Authenticator "LOGIN" returned "Symfony\Component\Mailer\Exception\TransportException: Expected response code "235" but got code "535", with message "535 Authentication Credentials Invalid"
Run Code Online (Sandbox Code Playgroud)

我的邮件程序配置如下所示:

Failed to authenticate on SMTP server with …
Run Code Online (Sandbox Code Playgroud)

php amazon-web-services symfony amazon-ses symfony-mailer

6
推荐指数
1
解决办法
1948
查看次数

Laravel 9 SymfonyMailer 错误 - 电子邮件必须具有“收件人”、“抄送”或“密件抄送”标头

在使用 Metronic 8 主题将 Laravel 8 项目更新到 Laravel 9 后,我在发送电子邮件时遇到了问题。我没有更改任何与电子邮件相关的代码,但现在我使用 Sendmail 驱动程序遇到了此错误:

电子邮件必须具有“收件人”、“抄送”或“密件抄送”标头。{"userId":6,"exception":"[object] (Symfony\Component\Mime\Exception\LogicException(code: 0): 电子邮件必须具有“To”、“Cc”或“Bcc”标头。在/home/myhome/public_html/myproject.com/vendor/symfony/mime/Message.php:128)

控制器

class MyController extends Controller
{
    public function activate($id)
    {
        $mymodel = MyModel::find($id);

        $contact = Contact::where('mymodel_id', $mymodel->id)->first();
        Mail::to($contact->email)->send(new MyMail($contact));
    }
}
Run Code Online (Sandbox Code Playgroud)

可邮寄

class MailActive extends Mailable
{
    use Queueable, SerializesModels;

    protected $contact;

    public function __construct(Contact $contact)
    {
        $this->contact = $contact;
    }

    public function build()
    {
        return $this->from('theemail@gmail.com', 'Me')
            ->view('emails.myemailview')
            ->with([
                'contact' => $this->contact
            ]);

        // $this->withSymfonyMessage(function (Email $message) {
        //     $message->getHeaders()->addTextHeader(
        //         'addAddress', 'theemail@gmail.com' …
Run Code Online (Sandbox Code Playgroud)

php sendmail laravel symfony-mailer laravel-9

6
推荐指数
1
解决办法
1万
查看次数

如何在发送前获取模板电子邮件的渲染正文?

我想在发送之前获得电子邮件的渲染。

我创建了一个TemplatedEmailwithhtmlTemplatecontext,它可以很好地发送,但是如何使用上下文获取生成的模板以将其保存在数据库中?(客户的需求)

我尝试过,getBody()但似乎只适用于文本模板,因为我得到A message must have a text or an HTML part or attachments.

$email = new TemplatedEmail();
$email->htmlTemplate($htmlTemplate);
$email->from($from)->to(...$to)->subject($subject);
$email->context($context);

dd($email->getBody());
Run Code Online (Sandbox Code Playgroud)

我想使用渲染方法,但我在服务中,不确定这是否是存储在数据库中的好方法。

php symfony symfony-mailer

5
推荐指数
1
解决办法
3139
查看次数

使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

我将 Symfony 邮件程序配置为使用 Messenger 发送电子邮件。

https://symfony.com/doc/current/mailer.html#sending-messages-async

我有两种语言的电子邮件,我依靠请求来检测语言,但现在电子邮件没有翻译。

我如何才能将消息翻译成请求中检测到的语言?

在我的控制器中:

$mailer->send(
            $user->email,
            $this->translator->trans('mails.recover.subject'),
            'email/client/password-recovery.html.twig',
            compact('user', 'hash', 'target')
        );
Run Code Online (Sandbox Code Playgroud)

模板:

{% extends 'email/base.html.twig' %}

{% block content %}
    <h2>{{ 'mails.recover.header' | trans({'%name%': user.name}) }}</h2>

    <p style="margin: 25px 0;">
        {{ 'mails.recover.text1' | trans({'%url%': url('default')}) | raw }}
    </p>

// More code
Run Code Online (Sandbox Code Playgroud)

信使配置:

framework:
    messenger:
        # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
        # failure_transport: failed

        transports:
            # https://symfony.com/doc/current/messenger.html#transport-configuration
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
            # failed: 'doctrine://default?queue_name=failed' …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-mailer

3
推荐指数
1
解决办法
664
查看次数

symfony 邮件程序的 PHP 异常

我是 Symfony 的初学者,我必须在我的网络服务中放置一个 Mailer。但我有一个我不明白的 php 异常。

\n

有我的邮件功能:

\n
 private function sendMail(MailerInterface $mailer, $p_leTI, $mail)\n          {\n             $pole = $p_leTI['pole'];\n             $type = $pole === 1 ? 'Logiciel' : ($pole === 2 ? 'Mat\xc3\xa9riel' : 'Incident');\n             $client = $p_leTI['nomCli'];\n             $email = (new Email())\n                 ->from(new Address('random@gmail.com', 'Support Id\xc3\xa9ation Informatique'))\n                 ->to(new Address('random@gmail.com'))\n                 ->bcc(new Address('random@gmail.com'))\n                 ->subject("Ticket $type Site: $client")\n                 ->text("Client: $client\\r\\nObservation: {$p_leTI['OBSERVATION']}")\n                 ->html("<html lang='fr'>\n                     <body>\n                         <p>Demandeur: {$p_leTI['nomCli']}</p>\n                         <p>Description: {$p_leTI['OBSERVATION']}</p>\n                         <p>T\xc3\xa9l\xc3\xa9phone: {$p_leTI['TEL']}</p>\n                         <p>Email: {$p_leTI['EMAILCLIENT']}</p>\n                     </body>\n                 </html>");\n             $mailer->send($email);\n\n             $email = (new TemplatedEmail())\n                 ->from(new Address('random@gmail.com', 'Support Id\xc3\xa9ation Informatique'))\n …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-mailer

3
推荐指数
1
解决办法
9290
查看次数

如何调试 Symfony Mailer 传递问题?

我正在开发我的第一个 Symfony 5 项目,并且很难使用内置的MailerInterface. 我之前曾在 Symfony 3 中使用过 Swift Mailer,以前从未遇到过类似的问题。

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\MailerInterface;
...

class SomeController extends AbstractController {
    public someAction(Request $request, MailerInterface $mailer) {
        ...
        $email = (new TemplatedEmail())
            ->from(new Address('address@example.com', 'My Symfony Mail'))
            //->to($user->getEmail())
            ->to('receiver@example.com')
            ->subject('Subject')
            ->htmlTemplate('email.html.twig');
    
        $mailer->send($email);
    }
}


// .env
#MAILER_DSN=smtp://user:pass@smtp.example.com:25
MAILER_DSN=sendmail://default
Run Code Online (Sandbox Code Playgroud)

如果MAILER_DSN有一些格式错误,则会抛出异常并显示在 Symfony 调试器页面上,例如The "invaliddsn" mailer DSN must contain a scheme...因此,配置的 DSN 似乎smtp://user:pass@smtp.example.com:25是正确的。在其他邮件应用程序中使用相同的凭据、主机和端口没有问题。

但是,使用此代码时不会显示错误/异常,并且我根本没有收到任何邮件。当然,我已经仔细检查了日志(没有错误)、接收者垃圾邮件文件夹(什么也没有)。指定 SMTP 服务器或 sendmail 没有任何区别。

Symfony 文档仅解释如何处理异常,但在我的例子中没有抛出异常。

虽然关于 Symfony 中的邮件问题还有很多其他问题,但其中大多数都涉及较旧的 Swift Mailer …

php symfony symfony-mailer

3
推荐指数
1
解决办法
1万
查看次数

在没有 symfony 框架的情况下使用 symfony/mailer 组件

我正在开发一个不使用任何框架的项目,我想使用Symfony Mailer组件来处理发送电子邮件。

安装部分(composer require)处理得很好,所有内容都包含在我的代码中,没有任何错误。但是,我仍然有一个问题:该组件的文档似乎只是为了与 symfony 框架一起使用而编写的。事实上,它指的是自动加载的配置文件,这些文件显然不存在于我的应用程序中。

这个实现似乎非常棘手,我想知道你们中是否有人已经面临同样的问题以及您想出了什么解决方案?

php symfony-mailer

2
推荐指数
1
解决办法
1699
查看次数

symfony 邮件程序中的多个 smtp 服务器

我正在尝试使用 Symfony 邮件程序组件配置发送电子邮件。它与一个 DNS(我的 .env 文件中有)完美配合。但我想要其中两个。我该如何配置它?我在文档中没有找到任何有意义的内容。

这是我的邮件程序.YAML

framework:
    mailer:
        dsn: '%env(MAILER_DSN)%'
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

    framework:
        mailer_default:
            dsn: '%env(MAILER_DSN1)%'
        mailer_second:
            dsn: '%env(MAILER_DSN2)%'
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这种选择是不可能的。

php symfony symfony-mailer

1
推荐指数
1
解决办法
1575
查看次数

symfony Mailer:不发送邮件并且没有错误

我使用 Symfony6.2 Mailer 发送这样的电子邮件 文档

https://symfony.com/doc/current/mailer.html 但邮件未发送(我在收件箱中看不到任何新邮件)并且我没有任何错误?!我的邮件程序.yaml

\`\`\`framework:
    mailer:
        transports:
            main: '%env(MAILER_DSN)%'
Run Code Online (Sandbox Code Playgroud)

我尝试使用调试php bin/console mailer:test,当我使用此命令但当我使用路由功能时,邮件发送成功

    {
        $email = (new Email())
            ->from('hello@example.com')
            ->to('you@example.com')
            //->cc('cc@example.com')
            //->bcc('bcc@example.com')
            //->replyTo('fabien@example.com')
            //->priority(Email::PRIORITY_HIGH)
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')
            ->html('<p>See Twig integration for better HTML integration!</p>');

        $mailer->send($email);

        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有收到任何邮件,我希望使用路由在收件箱中找到新邮件

php symfony symfony-mailer symfony6

1
推荐指数
1
解决办法
700
查看次数