Laravel - cURL错误6:无法解析主机:api.mailgun.net;未知错误(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)

时间:2017-01-09 20:01:43

标签: php laravel curl mailgun

在本地服务器上,我可以轻松地使用mailgun发送邮件.... 一切正常.... 但是,在将Laravel应用程序带到Web服务器之后,邮件系统不再起作用了。出现此错误。

我的.env文件

APP_ENV=production

APP_KEY=base64:8K9zZjAKdpoBIpMeW53K24FxrKi38dX/EnUe9+5cMKk=
APP_DEBUG=true APP_LOG_LEVEL=debug     
APP_URL=http://pathofmywebsite.com

DB_CONNECTION=mysql 
DB_HOST=localhost 
DB_PORT=3306 
DB_DATABASE=database
DB_USERNAME=username
DB_PASSWORD=password

BROADCAST_DRIVER=log 
CACHE_DRIVER=file 
SESSION_DRIVER=file 
QUEUE_DRIVER=sync    
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null 
REDIS_PORT=6379

MAIL_DRIVER=mailgun 
MAIL_HOST= 
MAIL_PORT= 
MAIL_USERNAME= 
MAIL_PASSWORD= 
MAIL_ENCRYPTION=tls

MAILGUN_DOMAIN=my.mailgundomain.com
MAILGUN_SECRET=key-9cebd121c16c037597c004c67fd9d0a3

PUSHER_APP_ID= 
PUSHER_KEY= 
PUSHER_SECRET=

在我的控制器中 -

function send(Request $request) {
    $value = 'value';
    Mail::send('path.to.mail.template', ['value' => $value], function ($message) use ($request)
    {
        $message->from('jakariablaine120@gmail.com', 'JakariaBlaine');
        $message->to($request->email);
    });
}

2 个答案:

答案 0 :(得分:1)

此错误通常是由于服务器问题。重新启动Apache可能会解决您的问题。在我的情况下,数字海洋是一个问题,因为我的服务器意外下降。当您的服务器启动并正常运行时,它会从本地系统发送电子邮件。

答案 1 :(得分:0)

对于确保此功能有效的其他要点...

确保在.env中定义以下所有内容

MAIL_FROM_NAME="Company Name"
MAIL_FROM_ADDRESS=enquiries@company.com
MAILGUN_DOMAIN=mg.company.com
MAILGUN_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxx-yyyyyyyy-zzzzzzz"
MAILGUN_ENDPOINT="api.eu.mailgun.net"

请注意,如果MailGun建议您设置一个子域来使用其系统(即mg.yourcompany.co),那么即使您实际上不会以以下方式发送电子邮件,也需要将其定义为Mailgun域变量:来自子域。

一些至关重要的事情很可能是造成您问题的原因;确保不要将端点配置为MailGun网站提供的URL。在MailGun网站中,他们将“基本API网址”称为:

https://api.mailgun.net/v3/mg.company.com(您的Mailgun定义的域后缀到其api URL的末尾)

但是,Laravel正在根据您定义的端点和域变量来编译API URL本身。如果将端点定义为它们提供的URL,则最终将导致一个完全无效的URL,这将导致Guzzle错误。

确保使用正确的端点。如果您在mailgun中将域定义为EU内部,请确保在端点设置中正确定义了该域。

如果仍然存在问题,请通过运行确保当前的Guzzle已安装到您的项目中

composer require guzzlehttp/guzzle

即使我遇到此错误并且在一定程度上仍在工作,但实际上并没有在composer.json文件中定义它,而且是最新的。

我还澄清了config / services.php文件中的设置,并确保那里的设置正确。请注意,我个人安装的文件带有与Laravel手册不同的语法。默认情况下,它们写为:

'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
    'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],

但是我重写了ENV(),使其格式如下:

'mailgun' => [
    'domain' => 'MAILGUN_DOMAIN',
    'secret' => 'MAILGUN_SECRET',
    'endpoint' => 'api.eu.mailgun.net',
],