У меня следующая ошибка при попытке отправить почту с Laravel 7 с помощью драйвера mailgun.
Client error: `POST https://api.eu.mailgun.net/v3/mail.firstdomain.com/messages.mime` resulted in a `401 UNAUTHORIZED` response: Forbidden
C:\laragon\www\lara7\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php#113
GuzzleHttp\Exception\ClientException
Он работал раньше, и я не помню, в какой момент появилась ошибка.
Раньше у меня была одна проблема с mailgun. Как будто я вижу на панели отладки, что почта отправляется, но не доставляется получателю. И проблема заключалась в том, что поле FROM было пустым, и в учетной записи mailgun эти сообщения находились в списке BOUNCE без движения. Теперь на стороне mailgun ничего не заблокировано. Я думаю они заблокированы где-то внутри Laravel.
Вот мой код
routes \ web. php
Route::post('/mymail', 'MainController@mymail')->name('mymail');
.env
MAIL_MAILER=mailgun
MAIL_FROM_ADDRESS=noreply@firstdomain.com
MAIL_FROM_NAME="robot name"
MAIL_TO_ADDRESS=user@seconddomain.com
MAIL_TO_NAME="TO name"
MAIL_REPLY_TO_ADDRESS=abc@seconddomain.com
MAIL_REPLY_TO_NAME="my name"
MAILGUN_DOMAIN=mail.firstdomain.com
MAILGUN_SECRET=mysecret
MAILGUN_ENDPOINT=api.eu.mailgun.net
** config \ mail. php*
'default' => env('MAIL_MAILER', 'mailgun'),
'mailers' => [
'mailgun' => [
'transport' => 'mailgun',
],
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'to' => [
'address' => env('MAIL_TO_ADDRESS'),
'name' => env('MAIL_TO_NAME'),
],
'reply_to' => [
'address' => env('MAIL_REPLY_TO_ADDRESS'),
'name' => env('APP_NAME')
],
** App \ Http \ Controllers \ MainController. php*
namespace App\Http\Controllers;
use App\Mail\Mymail;
use App\Http\Requests\MymailRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class MainController extends Controller
{
public function mymail(MymailRequest $request) {
Mail::to( 'user@seconddomain.com' )->send(new Mymail());
return [
'message' => 'Sent!',
];
}
}
Приложение \ Mail \ Mymail. php
namespace App\Mail;
use Illuminate\Http\Request;
use App\Http\Requests\MymailRequest;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class Mymail extends Mailable
{
use Queueable, SerializesModels;
public $subject = 'My test mail';
public function __construct()
{
}
public function build(MymailRequest $request)
{
$this->from('noreply@firstdomain.com')->view('mail.mymail')->withRequest($request);
}
}
Приложение \ Http \ Requests \ MymailRequest. php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MymailRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
'phone' => 'required'
];
}
}
resources \ views \ mail \ mymail.blade. php
<p>{{ $request->currentUrl }}</p>
<p>{{ $request->name }}</p>
<p>{{ $request->phone }}</p>
Вот ответ от chrome вкладки сети инструментов разработчика
{
"message": "Client error: `POST https://api.eu.mailgun.net/v3/mail.firstdomain.com/messages.mime` resulted in a `401 UNAUTHORIZED` response:\nForbidden\n",
"exception": "GuzzleHttp\\Exception\\ClientException",
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\guzzle\\src\\Exception\\RequestException.php",
"line": 113,
"trace": [
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\guzzle\\src\\Middleware.php",
"line": 65,
"function": "create",
"class": "GuzzleHttp\\Exception\\RequestException",
"type": "::"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 203,
"function": "GuzzleHttp\\{closure}",
"class": "GuzzleHttp\\Middleware",
"type": "::"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 156,
"function": "callHandler",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "::"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\TaskQueue.php",
"line": 47,
"function": "GuzzleHttp\\Promise\\{closure}",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "::"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 246,
"function": "run",
"class": "GuzzleHttp\\Promise\\TaskQueue",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 223,
"function": "invokeWaitFn",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 267,
"function": "waitIfPending",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 225,
"function": "invokeWaitList",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\promises\\src\\Promise.php",
"line": 62,
"function": "waitIfPending",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\guzzlehttp\\guzzle\\src\\Client.php",
"line": 183,
"function": "wait",
"class": "GuzzleHttp\\Promise\\Promise",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Transport\\MailgunTransport.php",
"line": 72,
"function": "request",
"class": "GuzzleHttp\\Client",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\swiftmailer\\swiftmailer\\lib\\classes\\Swift\\Mailer.php",
"line": 71,
"function": "send",
"class": "Illuminate\\Mail\\Transport\\MailgunTransport",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailer.php",
"line": 519,
"function": "send",
"class": "Swift_Mailer",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailer.php",
"line": 288,
"function": "sendSwiftMessage",
"class": "Illuminate\\Mail\\Mailer",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailable.php",
"line": 170,
"function": "send",
"class": "Illuminate\\Mail\\Mailer",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\Localizable.php",
"line": 19,
"function": "Illuminate\\Mail\\{closure}",
"class": "Illuminate\\Mail\\Mailable",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailable.php",
"line": 171,
"function": "withLocale",
"class": "Illuminate\\Mail\\Mailable",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailer.php",
"line": 304,
"function": "send",
"class": "Illuminate\\Mail\\Mailable",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\Mailer.php",
"line": 258,
"function": "sendMailable",
"class": "Illuminate\\Mail\\Mailer",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Mail\\PendingMail.php",
"line": 122,
"function": "send",
"class": "Illuminate\\Mail\\Mailer",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\app\\Http\\Controllers\\MainController.php",
"line": 48,
"function": "send",
"class": "Illuminate\\Mail\\PendingMail",
"type": "->"
},
{
"function": "freezamer",
"class": "App\\Http\\Controllers\\MainController",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php",
"line": 54,
"function": "call_user_func_array"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php",
"line": 45,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
"line": 225,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
"line": 182,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 685,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 128,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php",
"line": 41,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php",
"line": 76,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php",
"line": 49,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php",
"line": 56,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Session\\Middleware\\StartSession",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php",
"line": 37,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php",
"line": 66,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Cookie\\Middleware\\EncryptCookies",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 103,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 687,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 662,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 628,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php",
"line": 617,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 165,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 128,
"function": "Illuminate\\Foundation\\Http\\{closure}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\barryvdh\\laravel-debugbar\\src\\Middleware\\InjectDebugbar.php",
"line": 65,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Barryvdh\\Debugbar\\Middleware\\InjectDebugbar",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php",
"line": 27,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php",
"line": 63,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\fruitcake\\laravel-cors\\src\\HandleCors.php",
"line": 37,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Fruitcake\\Cors\\HandleCors",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\fideloper\\proxy\\src\\TrustProxies.php",
"line": 57,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 167,
"function": "handle",
"class": "Fideloper\\Proxy\\TrustProxies",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php",
"line": 103,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 140,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php",
"line": 109,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "C:\\laragon\\www\\lara7\\public\\index.php",
"line": 55,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
}
]
}