在 laravel 错误中使用 mailgun 发送电子邮件

Sending Email with mailgun in laravel error

你好,我只是想在 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,

);

按照以下步骤操作

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

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

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

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

  7. 像这样配置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 会处理这个。

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

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

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

'domain' => env('');

'secret' => env('');

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

domain' =>'yourdomain';

'secret' => 'yoursecret';

希望这对您有所帮助,因为我确定我不是唯一可能 运行 关注此问题的人。

只想添加一个可能的错误原因。当我还没有设置授权收件人时,我在使用沙盒模式时收到了这个错误。当我登录 Mailgun 并将目标收件人添加到 "Authorized Recipient" 列表时,错误消失了。

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

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

我还在 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,

希望对大家有用。