POST запрос в формате Laravel 401 UNAUTHORIZED - PullRequest
0 голосов
/ 08 мая 2020

У меня следующая ошибка при попытке отправить почту с 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": "->"
        }
    ]
}

1 Ответ

0 голосов
/ 09 мая 2020

Согласно документации Mailgun: https://documentation.mailgun.com/en/latest/api-intro.html#errors

401 Неавторизовано - не предоставлен действительный ключ API

Убедитесь, что вы используете действительный Ключ API - или отправка на зарегистрированные адреса электронной почты, если вы используете Sandbox.

...