使用Mailgun在Laravel 5.4中发送邮件会收到错误代码“ 401 UNAUTHORIZED`响应:禁止”

Whi*_*zle 6 php email laravel mailgun

我正在尝试使用Mailgun在Laravel 5.4项目中发送邮件。我想我正确设置了配置。但是,我收到了这样的错误消息,例如

RequestException.php第111行中的ClientException:客户端错误:POST https://api.mailgun.net/v3/sandboxfeb88d58f18841738b2fc81d7cbc7631.mailgun.org/messages.mime>导致401 UNAUTHORIZED响应:禁止

这是我的配置:

在.env文件中

MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=sandboxfeb88d58f18841738b2fc81d7cbc7631.mailgun.org
MAILGUN_SECRET=pubkey-1767e**********
Run Code Online (Sandbox Code Playgroud)

在mail.php文件中

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'richi.htoo@gmail.com'),
    'name' => env('MAIL_FROM_NAME', 'Richi Htoo'),
],
Run Code Online (Sandbox Code Playgroud)

在services.php文件中

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
],
Run Code Online (Sandbox Code Playgroud)

我写了默认路径的邮件发送代码,例如

Route::get('/', function () {
//return view('welcome');

    $data = [
        'title' => 'Hi student I hope you like the course',
        'content' => 'This laravel course was created with a lot of love and dedication for you'
    ];

    Mail::send('emails.test', $data, function($message){
        $message->to('white.nuzzle@gmail.com', 'White Nuzzle')->subject('Hello student how are you?');
    });
});
Run Code Online (Sandbox Code Playgroud)

我还安装了Laravel软件包“ guzzlehttp / guzzle” 6.2版来发送邮件。

但是当我拨打该默认本地路由时,如上所述,我收到一条错误消息。

我在包括论坛“ stackoverflow.com”在内的任何地方都找不到针对我的错误的解决方案。

谁能帮我吗?

Dar*_*phy 11

如果您不使用美国 Mailgun 区域,您可以在服务配置文件中定义您的区域的端点:

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
    'endpoint' => env('MAILGUN_ENDPOINT', 'api.eu.mailgun.net'),
],
Run Code Online (Sandbox Code Playgroud)

或者,可以在 .env 文件中定义 MAILGUN_ENDPOINT:

MAILGUN_ENDPOINT="api.eu.mailgun.net"
Run Code Online (Sandbox Code Playgroud)

  • 这对我了解欧洲地区很有帮助。谢谢。应该指出的是,您也可以将 MAILGUN_ENDPOINT='api.eu.mailgun.net' 添加到您的 .env 文件中。 (3认同)

Moh*_*ami 7

坦白讲,这是一个磨难,我让沙盒的工作方式如下

  1. 添加了授权收件人-沙盒显然无法向任何人发送电子邮件,您需要将其添加为授权收件人。
  2. 使用正确的凭据在加入.ENV文件MAILGUN_DOMAINMAILGUN_SECRET太为services.php使用它们。请记住,MAILGUN_SECRET它是私钥,以开头key-,请不要在此处使用公钥
  3. MAIL_DRIVER=mailgun MAIL_HOST=smtp.mailgun.org MAIL_PORT=587 MAIL_USERNAME=postmaster@sandboxcc*****************.mailgun.org MAIL_PASSWORD=****************** MAIL_ENCRYPTION=tls
  4. !!!最重要的!!!!重新启动服务器以加载新的.env文件


小智 6

ok找到了,在文件“vendor\laravel\framework\src\Illuminate\Mail\Transport\MailgunTransport.php”中,使用的端点是美国的。

正如文档https://documentation.mailgun.com/en/latest/api-intro.html#mailgun-regions 中所述,您有一个适用于美国和欧盟的端点。

如果您是欧洲人,则必须使用“api.eu.mailgun.net”,否则会收到 401。

只需更改端点:Laravel 很强大,他们会考虑这一点。您可以在 config/services.php/mailgun 条目中添加一个“端点”键。


Fas*_*ver 0

就我个人而言,我从未让沙箱帐户正常工作。我一个多月前刚刚做了这件事。沙盒从来没有起作用,但我创建的真实账户却起作用了。尝试切换到真实账户,然后告诉我这是否适合您。