【发布时间】:2021-03-30 20:48:53
【问题描述】:
这是我的相关@987654323@:
MAIL_MAILER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
MAILGUN_DOMAIN=https://api.mailgun.net/v3/mail.example.com
MAILGUN_SECRET=fb...a1
注意:我使用 example.com 作为上面的示例,但我已将我的实际域名放在那里。我没有从 Laravel 应用程序中收到任何错误,并且在 Mailgun 仪表板上的日志中看不到任何内容。我的域已通过验证。 fb...a1 也是经过编辑的 API 代码,我当然会使用从 mailgun 仪表板获得的完整 API 代码。
config/mail.php:
<?php
return [
'default' => env('MAIL_MAILER', 'mailgun'),
'mailers' => [
'mailgun' => [
'transport' => 'mailgun',
],
],
];
config/services.php:
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],
在我的控制器中,我有:
$email = $validated['email']; // I've verified this is my actual email
Mail::to($email)->send(new OrderCreated());
app/Mail/OrderCreated.php:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class OrderCreated extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function build()
{
return $this
->from('no-reply@example.com')
->markdown('emails.order-created');
}
}
最后,resources/views/emails/order-created.blade.php:
@component('mail::message')
# Order Confirmation
This email is test.
@endcomponent
我正在使用 Laravel 8.14.0 和 Valet 2.13.0,所以我在本地使用 https://my-app.test 域对其进行测试。该应用程序正在使用 InertiaJS,以防万一。控制器代码运行没有错误,但我在 mailgun 仪表板上看不到任何日志,并且电子邮件从未到达我的收件箱。我不知道出了什么问题或如何调试它。
更新:
我注意到如果我将 MAILGUN_DOMAIN 和 MAILGUN_SECRET 设置为 null,我会得到与上述相同的行为。如果我将 MAILGUN_DOMAIN 设置为像 abcd 这样的无意义值,我会收到以下错误:
GuzzleHttp\Exception\ClientException
Client error: `POST https://api.mailgun.net/v3/abcd/messages.mime` resulted in a `401 UNAUTHORIZED` response: Forbidden
如果我将MAILGUN_SECRET 设置为abcd,它会按照最初描述的方式工作(没有错误,但也没有电子邮件)。
【问题讨论】:
-
您是否在 Mailgun 帐户中检查了域的正确端点?如果您的域是在其欧盟端点中创建的,并且您尝试将其与美国端点一起使用,它可能会像您描述的那样静默失败。
-
MAIL_FROM_ADDRESS=null - 这可能是你的问题,我知道你在课堂上设置它但是我过去曾遇到过这个问题。确保它也是您的 mailgun 的正确域。
-
@EnricoDias 我使用美国端点创建了它,api.mailgun.net/v3... 是我在仪表板中显示的内容。
-
@MichaelMano 我已经设置了 MAIL_FROM_ADDRESS,它似乎没有什么区别。确保它是正确的域作为我的 mailgun 域是什么意思?我的域设置为 mail.example.com,我尝试了 no-reply@exmaple.com 和 no-reply@mail.example.com。
-
@chipit24 mail.example.com 就是我的意思。但我想那不是问题,驱动程序设置为 smtp?你安装 guzzle 了吗?
标签: php laravel email mailgun laravel-8