对于通过邮件发送的每个错误日志,我们都会收到另一封额外的电子邮件,其中包含 2 行 smtp 调试日志消息。
symfony new --demo
)3.7.0
5.2.1
// 5.2.9
,5.3.0-RC1
# 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)
dev
或test
环境中没有额外的邮件test: true …
我只是想使用 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) 我正在配置一个带有自签名证书的邮件服务器(后缀),而且这个自签名证书似乎是 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 配置文件)。
我正在尝试发送带有动态 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) 我的适合发送电子邮件的控制器如下所示:
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) 在使用 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) 我想在发送之前获得电子邮件的渲染。
我创建了一个TemplatedEmail
withhtmlTemplate
和context
,它可以很好地发送,但是如何使用上下文获取生成的模板以将其保存在数据库中?(客户的需求)
我尝试过,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)
我想使用渲染方法,但我在服务中,不确定这是否是存储在数据库中的好方法。
我将 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) 我是 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) 我正在开发我的第一个 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 …
我正在开发一个不使用任何框架的项目,我想使用Symfony Mailer组件来处理发送电子邮件。
安装部分(composer require
)处理得很好,所有内容都包含在我的代码中,没有任何错误。但是,我仍然有一个问题:该组件的文档似乎只是为了与 symfony 框架一起使用而编写的。事实上,它指的是自动加载的配置文件,这些文件显然不存在于我的应用程序中。
这个实现似乎非常棘手,我想知道你们中是否有人已经面临同样的问题以及您想出了什么解决方案?
我正在尝试使用 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)
但不幸的是,这种选择是不可能的。
我使用 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)
我没有收到任何邮件,我希望使用路由在收件箱中找到新邮件