2020年12月20日星期日

Mailgun emails not sending from Laravel 8 Valet app

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).

https://stackoverflow.com/questions/65386848/mailgun-emails-not-sending-from-laravel-8-valet-app December 21, 2020 at 10:26AM

没有评论:

发表评论