【问题标题】:Laravel - cURL error 6: Could not resolve host: api.mailgun.net; Unknown error (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)Laravel - cURL 错误 6:无法解析主机:api.mailgun.net;未知错误(参见 http://curl.haxx.se/libcurl/c/libcurl-errors.html)
【发布时间】:2017-05-24 04:24:05
【问题描述】:

在本地服务器上,我可以使用 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);
    });
}

【问题讨论】:

  • “无法解析主机”表示您的网络服务器找不到 mailgun 的服务器。如果您对服务器有 shell 访问权限,请查看是否可以 ping 它,或尝试nslookup api.mailgun.net
  • @aynber 我在我的服务器上没有任何 shell 访问权限......除了使用 shell 之外,还有什么办法可以解决这个问题吗?
  • 您可能需要与您的虚拟主机商联系。我的建议只是一些简单的故障排除,而不是解决问题。他们可以更好地调查问题或提供答案。
  • 重启服务器。两个小时后,这对我有用。

标签: php laravel curl mailgun


【解决方案1】:

此错误通常是由于服务器问题。重新启动您的 apache 可能会解决您的问题。就我而言,数字海洋是一个问题,因为我的服务器意外停机。当您的服务器启动并正常运行时,这会从本地系统发送电子邮件。

【讨论】:

    【解决方案2】:

    确保此方法有效的其他重要点...

    确保在您的 .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 中将域定义为在欧盟内部,请确保在端点设置中正确定义。

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

    composer require guzzlehttp/guzzle
    

    即使我遇到了这个错误并且 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',
    ],
    

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2019-05-25
      • 2016-04-14
      • 2021-01-08
      • 1970-01-01
      • 2021-08-22
      • 2020-11-07
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多