我正在使用swiftmailer发送电子邮件,我希望有相同的附件: * HTML 版本 ( text/html) 作为内嵌图像 (cid) * 文本版本 ( text/plain) 作为附件
我正在 Ubuntu 上使用 Mozilla Thunderbird 45.3.0 测试电子邮件。
我已经被玩弄->setBody,->addPart,->embed和->attach方法,但我总是打破的一个版本(即获得纯文本电子邮件任我查看邮件的HTML或文本)。
我的测试代码看起来像(当然有有效的 SMTP 地址和文件路径):
function swiftMail() {
require_once './vendor/swiftmailer/swiftmailer/lib/swift_required.php';
//Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.mail.com', 25);
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
// Create the message
$message = Swift_Message::newInstance()
// Give the message a subject
->setSubject('SwiftMailer test // ' . uniqid('', true))
// Set …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,每个用户都可以使用自己的 SMTP 服务器。因此必须提供配置。我正在使用 Laravel 通知发送电子邮件。如果我不使用队列(这意味着同步),则没有问题。
我做了一个 CustomNotifiable Trait:
config([
'mail.host' => $setting->smtp_host,
'mail.port' => $setting->smtp_port,
'mail.username' => $setting->smtp_username,
'mail.password' => $setting->smtp_password,
'mail.encryption' => $setting->smtp_encryption,
'mail.from.address' => $setting->smtp_from_address,
'mail.from.name' => $setting->smtp_from_name,
]);
(new \Illuminate\Mail\MailServiceProvider(app()))->register();
Run Code Online (Sandbox Code Playgroud)
之后,我恢复了原始配置:
config([
'mail' => $originalMailConfig
]);
(new \Illuminate\Mail\MailServiceProvider(app()))->register();
Run Code Online (Sandbox Code Playgroud)
到现在都没问题。但是,如果它已排队,即使提供了任何其他 SMTP 配置,也只会为所有其他电子邮件采用启动队列工作器后的第一个配置。config/mail.php 中的默认配置将被覆盖。但这仅适用于第一次。
我已经在 AppServiceProvider::boot 方法中创建了(SMTP 配置存储在通知中):
Queue::before(function (JobProcessing $event) {
// Handle queued notifications before they get executed
if (isset($event->job->payload()['data']['command']))
{
$payload = $event->job->payload();
$command = unserialize($payload['data']['command']);
// setting dynamic SMTP data if required
if (isset($command->notification->setting))
{ …Run Code Online (Sandbox Code Playgroud) 我的网络主机在 php 中禁用了proc_open功能,我无法再发送电子邮件。
我收到此错误日志:
> proc_open() has been disabled for security reasons
Run Code Online (Sandbox Code Playgroud)
我使用 Laravel 默认的 Swiftmailer。我能做什么?
如您所知,Laravel在要发送电子邮件时会触发MessageSending事件。我添加了一个侦听器来侦听此特定事件。
不幸的是,我无法确定侦听器句柄方法内的收件人电子邮件地址。我能得到的唯一论据是 Swift Mailer 消息。
您知道我可以在侦听器的处理方法中检索收件人电子邮件地址的方法吗?
Laravel 5.7 使用 Swift Mailer 发送电子邮件。
默认情况下,所有发送的电子邮件都将Message-ID带有域的标题swift.generated(例如。Message-ID: <90b9835f38bb441bea134d3ac815dd6f@swift.generated>)。
例如,我想将域更改swift.generated为my-domain.com.
如何为所有电子邮件更改此设置?
这是我的第一个问题,对我来说如此简单。
\n如何在 php 中将 STARTTLS 与 swiftmailer 一起使用?
\n我目前使用的是在 PHP 7.3 上运行的 Laravel 7.x。
\n我需要连接到 Office365 SMTP 服务器,不幸的是,该服务器仅支持 STARTTLS。\n由于其他公司基础设施,我无法使用 Office365 之外的其他提供商,因此我的选择受到限制。
\n我的问题是,当我使用 STARTTLS 作为邮件加密并尝试通过 SMTP 服务器连接/发送邮件时,我收到以下错误:
\n\n\n[2020-06-25 11:15:21] stage.ERROR:无法与主机\xc2\xa0smtp.office365.com\xc2\xa0:stream_socket_client()建立连接:无法连接到\xc2\xa0starttls:/ /smtp.office365.com:587\xc2\xa0(无法找到套接字传输“starttls” - 您在配置 PHP 时是否忘记启用它?) {"userId":1,"exception":"[object] (Swift_TransportException(代码:0):无法与主机\xc2\xa0smtp.office365.com\xc2\xa0:stream_socket_client()建立连接:无法连接到\xc2\xa0starttls://smtp.office365.com:587 \xc2\xa0(无法找到套接字传输“starttls” - 您在配置 PHP 时是否忘记启用它?)位于 /home/forge/censoreddomain.com/releases/20200615132510/src/vendor/swiftmailer/swiftmailer/lib /classes/Swift/Transport/StreamBuffer.php:269)
\n
我的 .env 配置邮件部分:
\nMAIL_DRIVER=smtp\nMAIL_HOST=smtp.office365.com\nMAIL_PORT=587\nMAIL_USERNAME=XXXX@XXXX.se\nMAIL_PASSWORD=XXXXXXXtXVF\nMAIL_ENCRYPTION=starttls\nRun Code Online (Sandbox Code Playgroud)\n 我可以从 Tinker 发送电子邮件,但是当我尝试从 Laravel 框架中的代码发送电子邮件时,出现以下错误:
Swift_TransportException (550)
Expected response code 250 but got code "550", with message "550 Bad HELO - Host impersonating domain name [mydomain.com] "
Run Code Online (Sandbox Code Playgroud)
这是我测试从 laravel 控制器发送电子邮件的简单邮件方法:
Mail::send('errors.401', [], function ($message) { $message->to('my.email@gmail.com')->subject('this works!'); });
Run Code Online (Sandbox Code Playgroud)
.env 文件:
MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
MAIL_USERNAME=info@mydomain.com
MAIL_PASSWORD=<password>
MAIL_ENCRYPTION=
Run Code Online (Sandbox Code Playgroud)
我已完成以下步骤,但仍然不起作用:
composer dump-autoload
php artisan view:clear
php artisan cache:clear
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)
更新:
我的代码位于 ubuntu 服务器上,我配置了 dns 服务器和 bind9 将域连接到服务器,并且我有一个外部邮件服务器来处理电子邮件。
因此,每当在 ubuntu 服务器中创建电子邮件请求时,它都会将其转发到外部邮件服务器。
我应该去哪里寻找问题?
我是 Laravel 新手,无法使用服务器发送邮件。下面给出了我的 env 文件和 mail.php 文件
.env
MAIL_MAILER=smtp
MAIL_HOST=mail.infomaniak.com
MAIL_PORT=465
MAIL_USERNAME=***.com
MAIL_PASSWORD=***
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=***.com
MAIL_FROM_NAME="${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)
配置/邮件.php
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'mail.infomaniak.com'),
'port' => env('MAIL_PORT', 465),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
]
Run Code Online (Sandbox Code Playgroud) 有人对这两个有一些评论吗?在经验,性能,容易度,问题,垃圾邮件相关等方面
假设您需要每1小时发送一次电子邮件(10-20)(cron job).
我正在尝试为我的应用程序的每个用户使用不同的SMTP配置。因此,使用Swift_SmtpTransport设置新的传输实例,将其分配给Swift_Mailer,然后将其分配给Laravel Mailer。
在完整代码段下方:
$transport = Swift_SmtpTransport::newInstance($mailConfig['smtp_host'], $mailConfig['smtp_port'], 'ssl');
$transport->setUsername($mailConfig['smtp_user']);
$transport->setPassword($mailConfig['smtp_pass']);
$smtp = new Swift_Mailer($transport);
Mail::setSwiftMailer($smtp);
Mail::queue(....);
Run Code Online (Sandbox Code Playgroud)
消息已添加到队列中,但从未调度。我猜想因为“真实”发送是异步的,所以它使用默认的SMTP配置,而不是Mail :: queue()之前的传输设置。
所以,问题是:使用Mail :: queue()时如何更改邮件传输方式?
swiftmailer ×10
laravel ×8
php ×7
email ×5
smtp ×2
events ×1
laravel-5 ×1
laravel-8 ×1
mail-queue ×1
pear ×1