Here's my relevant .env
:
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
Note: I use example.com as an example above, but I've put my actual domain name there. I do not get any errors from the Laravel app, and I do not see anything in the logs on the Mailgun dashboard. My domain is verified. fb...a1
is also the redacted API code, I of course use my full API code I get from the mailgun dashboard.
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'), ],
In my controller I have:
$email = $validated['email']; // I've verified this is my actual email Mail::to($email)->send(new OrderCreated());
app/Mail/OrderCreated.php
:
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderCreated extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ public function __construct() { // } /** * Build the message. * * @return $this */ public function build() { return $this ->from('no-reply@example.com') ->markdown('emails.order-created'); } }
And finally, resources/views/emails/order-created.blade.php
:
@component('mail::message') # Order Confirmation This email is test. @endcomponent
I'm using Laravel 8.14.0 and Valet 2.13.0, so I'm testing it locally with an https://my-app.test domain. The app is using InertiaJS, in case that makes any difference. The controller code runs without error, but I see no logs on my mailgun dashboard and the email never arrives in my inbox. I have no idea what's wrong or how to debug this.
UPDATE:
I've noticed if I set MAILGUN_DOMAIN
and MAILGUN_SECRET
to null
, I get the same behaviour as above. If I set MAILGUN_DOMAIN
to a nonsense value like abcd
I get the following error:
GuzzleHttp\Exception\ClientException Client error: `POST https://api.mailgun.net/v3/abcd/messages.mime` resulted in a `401 UNAUTHORIZED` response: Forbidden
And if I set MAILGUN_SECRET
to abcd
it works as originally described (no error, but also no email).
没有评论:
发表评论