使用 Mailgun API 在 Laravel 8 中未发送电子邮件

Posted

技术标签:

【中文标题】使用 Mailgun API 在 Laravel 8 中未发送电子邮件【英文标题】:Email Not Being Sent in Laravel 8 using Mailgun API 【发布时间】:2021-03-09 21:28:48 【问题描述】:

我设置了我的 mailgun 帐户并尝试使用沙盒域来测试使用 API 而不是 smtp 发送电子邮件。这就是我的 Laravel .env 文件的设置方式

MAIL_MAILER=mailgun
MAILGUN_DOMAIN=sandboxxxxxxx.mailgun.org
MAILGUN_SECRET=xxxxxxxxx
MAILGUN_ENDPOINT=api.mailgun.net/v3/<mailgun-domain>

然后我在控制器中使用它来发送电子邮件。

    $emailToSendTo = Page::where('name', 'contact')->first()->email;

    Mail::to($emailToSendTo)->send(new ContactSent($request));

当我查看 mailgun 仪表板时,我的电子邮件没有被发送。我也没有收到任何错误消息。我也知道 mailgun 将您可以在沙盒域中发送到的电子邮件限制为您在 mailgun 中设置的内容。 $emailToSendTo 是经过验证的电子邮件。

ContactSent 类已在刀片视图中正常设置。

【问题讨论】:

【参考方案1】:

我将回答我自己的问题,以便对某人有所帮助。

我把这个放在vendor/laravel/src/Illuminate/Mail/Transport/MailgunTransport.php和方法send()里面:

dd($this->endpoint);

然后我尝试调用发送邮件的方法。我注意到MAILGUN_ENDPOINT 没有正确设置,因此dd($this-&gt;endpoint) 向我显示了错误的端点。

应该是:

MAILGUN_ENDPOINT=api.mailgun.net

这解决了我的问题。我希望这将有助于调试。另外我真的认为环境变量应该命名为MAILGUN_BASE_URL,因为它把我弄糊涂了。

【讨论】:

MAILGUN_ENDPOINT 的使用是可选的,仅在需要指定欧盟地区时使用。文档中很清楚:laravel.com/docs/8.x/mail#mailgun-driver 此外,“ENDPOINT”命名来自与 laravel 设计无关的 mailgun:documentation.mailgun.com/en/latest/api-intro.html#errors ha 没有注意到感谢@EstebanGarcia,但它没有抛出任何错误。也许需要一个拉取请求。

以上是关于使用 Mailgun API 在 Laravel 8 中未发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 5,如何确定 Mailgun 电子邮件是不是发送成功?

Mailgun、Mandrill 和 Ses 驱动程序、SMTP 和 phpmailer,在 Laravel 5.1 中使用哪一个?

laravel框架总结(十五) -- 发送邮件

使用 Laravel 的 Mailgun 驱动程序,你如何(优雅地)通过电子邮件发送自定义数据和标签?

markdown Laravel Mailgun安装程序

Mailgun 批量发送中的密件抄送不包括替换