使用 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->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 中使用哪一个?