【问题标题】:Sending Email with mailgun in laravel error在 laravel 错误中使用 mailgun 发送电子邮件
【发布时间】:2015-02-02 20:47:16
【问题描述】:

您好,我一直只是尝试在 laravel 中发送电子邮件,我阅读了文档,他们让它看起来很容易,但是每当我尝试时,我不断收到错误,我尝试 sendgrid 没有工作,现在我尝试使用 mailgun,但我也遇到了问题。

这是我的代码::

$data = array();

        Mail::send('emails.auth.activate', $data, function($message)
        {
            $message->to('xxxxxxxxx@gmail.com', 'John Doe')->subject('This is a demo!');
        });

这是我得到的错误:

GuzzleHttp \ Exception \ ClientException (400)

Client error response [url] https://api.mailgun.net/v2/mail.xxxxxxx.com/messages.mime [status code] 400 [reason phrase] BAD REQUEST 

邮件配置:

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "log"
    |
    */

    'driver' => 'mailgun',

    'host' => 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org',

    'port' => 587,

    'from' => array('address' => 'mail@xxxxxx.com', 'name' => 'Xxxxxxxx'),

    'encryption' => 'tls',

    'username' => 'xxxxxxx@gmail.com',

    'password' => 'xxxxxxxxxxx',

    'sendmail' => '/usr/sbin/sendmail -bs',

    'pretend' => true,

);

【问题讨论】:

  • 您能否提供有关您当前邮件配置的更多信息,以及您在哪里实例化 emails.auth.activate?
  • 实例化是什么意思?我认为这应该是通往视图的路径。
  • 我只是向我们展示了更多代码,例如您的 mailgun 设置在哪里,您在任何库中加载的位置,您从哪里获取配置设置。

标签: laravel mailgun


【解决方案1】:

按照这些步骤进行

  1. 首先,通过在composer.json 中添加"guzzlehttp/guzzle": "~4.0" 行来安装guzzle 包
  2. 使用composer update 更新作曲家
  3. http://www.mailgun.com/ 在mailgun 上创建您的帐户。创建帐户后,请注意创建的邮枪子域如sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org 和创建的API 密钥如key-65c33f1xxxxxxxxxxxxxxxxxxxx
  4. 转到config/services.php 文件并替换

    'mailgun' => array(
        'domain' => '',
        'secret' => '',
    ),
    

    'mailgun' => array(
        'domain' => 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org',
        'secret' => 'key-65c33f1xxxxxxxxxxxxxxxxxxxx',
    ),
    

    如果您想创建自己的子域,您可以创建并分配给域(作为替代方案)

  5. 像这样配置config/mail.php

    'driver' => 'mailgun',
    'host' => 'smtp.mailgun.org',
    'port' => 587,
    'from' => array('address' => 'mail@xxxxxx.com', 'name' => 'Xxxxxxxx'),
    'encryption' => 'tls',
    'username' => null,
    'password' => null,
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false
    

请注意,您不需要为此提供用户名和密码。 Mailgun 会处理这个问题。

现在尝试发送电子邮件。希望这可以帮助。祝你好运!

【讨论】:

  • 嗨,我们从哪里得到密钥 'secret' => 'key-65c33f1xxxxxxxxxxxxxxxxxxxx',
【解决方案2】:

只是想为错误添加一个可能的原因。当我尚未设置授权收件人时,我在使用沙盒模式时收到此错误。当我登录 Mailgun 并将预期收件人添加到“授权收件人”列表时,错误消失了。

【讨论】:

  • 您好.. 您如何添加授权收件人?在 MailChimp 中
【解决方案3】:

我遇到了同样的问题并不断收到以下错误: 客户端错误响应 [url] https://api.mailgun.net/v3//messages.mime 404 not found

没有太多关于我正在使用的 Laravel 5.1 在线编写的错误的文章。事实证明,在 config->services 中默认安装了 Laravel 5.1:

'domain' =&gt; env('');

'secret' =&gt; env('');

由于某种原因,如果您按照默认安装将您的域和秘密包装在 env 中,MailGunTransport 不会接收它。所以只需将其设置为以下内容:

domain' =&gt;'yourdomain';

'secret' =&gt; 'yoursecret';

希望这会有所帮助,因为我确定我不是唯一可能遇到此问题的人。

【讨论】:

  • 我认为要让它像以前一样工作,您还必须设置域并将其隐藏在 .env 文件中。
  • 谢谢,我也遇到了这个 404 not found 问题,使用 Laravel 5.4。文档有您建议的示例,但实际代码仍然有'domain' =&gt; env('MAILGUN_DOMAIN'), 'secret' =&gt; env('MAILGUN_SECRET'),env() 可能会被忽略。我决定在 env 文件中设置 domainsecret,这样这个文件就保持不变,并且只引用 env 文件来获取这些东西。
  • 确保您在 .env 文件中使用的是密钥而不是公共 mailgun 密钥。
【解决方案4】:

我遇到了这个问题,因为我没有激活我的 mailgun 帐户。激活后一切正常

【讨论】:

    【解决方案5】:

    我也曾在 Laravel 5.1 中配置 Mailgun,对我有用的是以下过程。希望它可以帮助某人:

    1) 通过在 composer.json 中添加 "guzzlehttp/guzzle": "5.0" 行来安装 guzzle 包,如下所示:

    "require": {
        "guzzlehttp/guzzle": "~5.0"
    },
    

    2) 在终端中使用sudo composer update 更新作曲家。

    3) 重启 Apache。

    4) 在http://www.mailgun.com 中创建帐户。它将创建一个Sub DomainAPI Key

    5) 在.env 中添加Sub DomainAPI Key,如下所示:

    MAILGUN_DOMAIN=sandbox8...........3b.mailgun.org
    MAILGUN_SECRET=key-9..................04
    

    6) 在 services.php 中添加以下行:

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

    7) 现在mail.php如下:

    'driver' => 'mailgun',
    'host' => 'smtp.mailgun.org',
    'port' =>  587,
    'from' => ['address' => null, 'name' => null],
    'encryption' => 'tls',
    'username' => null,
    'password' => null,
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,
    

    我希望这对大家有用。

    【讨论】:

      【解决方案6】:

      除非您已将他们添加到授权收件人类别中,否则您将能够向同一域中的人员发送邮件。 如果您将某人添加到授权收件人类别,则他/她必须批准该请求,然后才能接收电子邮件。

      【讨论】:

        猜你喜欢
        • 2017-10-12
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 2019-10-18
        • 2021-03-09
        • 2021-01-01
        • 1970-01-01
        • 2016-04-24
        相关资源
        最近更新 更多