Laravel 401中的POST请求未经授权

时间:2020-05-08 20:11:53

标签: laravel email guzzle

当尝试使用mailgun驱动程序从Laravel 7发送邮件时,出现以下错误。

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的一个问题之前。就像我在debugbar中看到的那样,已发送邮件,但随后未将其传递给收件人。 问题是FROM字段为空,并且在mailgun帐户中,这些消息位于BOUNCE列表中而没有移动。 现在,在邮件枪一侧没有任何障碍物。我认为它们被挡在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!', 
                ];
    }
}

App \ 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);
    }
}

App \ 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'

        ];
    }
}

资源\视图\邮件\ 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": "->"
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

根据Mailgun文档:https://documentation.mailgun.com/en/latest/api-intro.html#errors

401未经授权-未提供有效的API密钥

请确保您使用的是有效的API密钥-如果您使用的是沙盒,请发送到注册的电子邮件地址。

答案 1 :(得分:0)

将服务器IP列入白名单后,请尝试:

Mailgun Dashboard > Settings > API Keys > API Security IP Whitelist

添加后,可能需要花费几分钟时间,之后您应该能够从laravel应用发送电子邮件