Laravel 5.1 GuzzleHttp客户端错误:404使用mailgun时

时间:2015-09-21 10:36:07

标签: php laravel laravel-5

我在使用Laravel发送邮件时使用Mailgun服务。但是,我今天已经确定了这一点,它刚刚停止工作。我在.envconfig/services.phpconfig/mail.php中输入了所有正确的信息。但是,我仍然收到以下错误:

ClientException in Middleware.php line 69: 
Client error: 404

看起来域名没有通过某种方式传递,即使在我的config/services.php文件中:

'mailgun' => [
    'domain' => env('mydomain.com'),
    'secret' => env('<my-mailgun-key>'),
],

我隐藏了上述凭据以确保安全,但在我的实际应用中,它们是正确的值。

请帮忙。

2 个答案:

答案 0 :(得分:6)

我遇到了一个非常类似的404问题,并尝试了Rogério提到的解决方案。我以为我做得对,但无论如何都试了一下。但是滥用env()函数不是我的问题。

我将config / services.php设置为如下所示:

'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN',''),
        'secret' => env('MAILGUN_SECRET',''),
    ],

如果在.env文件中找不到名为MAILGUN_DOMAIN和MAILGUN_SECRET的值,则会提供空字符串。然后,在我的.env文件中,我从Mailgun域信息页面中添加了 API基本网址 API密钥。所以.env看起来像这样:

MAILGUN_DOMAIN=https://api.mailgun.net/v3/sandbox123abc.mailgun.org
MAILGUN_SECRET=key-123456abcdef

值正在传递,但仍然是404.查看Mailgun上的How do I start sending email文档,我看到他们的API URL末尾包含“消息” - 我尝试手动添加到.env设定:

MAILGUN_DOMAIN=https://api.mailgun.net/v3/sandbox123abc.mailgun.org/messages

这也没有用,但是让我更仔细地看看Laravel吐出的堆栈痕迹。那时我注意到它试图连接的URL是:

  

https://api.mailgun.net/v3 https://api.mailgun.net/v3 /sandbox123abc.mailgun.org/messages/messages.mime

阿公顷!使用Mailgun的基本API网址不正确!通过重复“https://api.mailgun.net/v3”部分就可以看出这一点。所以恰当名为MAILGUN_ DOMAIN 的设置确实需要:

MAILGUN_DOMAIN=sandbox123abc.mailgun.org

现在看来显而易见,但我花了太多时间搞清楚。我以为我会把它放在那里以防其他人碰巧错过那个细节

答案 1 :(得分:3)

我遇到与你相同的问题,并通过删除env()调用来解决它。 那是因为env将在第一个参数中返回env变量的值(而不是参数的值),否则返回第二个参数。

所以:

'mailgun' => [
    'domain' => 'mydomain.com',
    'secret' => '<my-mailgun-key>',
],

试试。