Laravel - 使用Mailgun无法发送邮件

10

服务器:Digital Ocean

Ubuntu 16.04

Laravel 5.8

我无法使用mailgun.com从laravel发送电子邮件。在Digital Ocean中,我已经在防火墙上打开了所有出站端口,在Digital Ocean中设置了TXT和MX记录的正确DNS设置。我在我的域名注册机构上拥有正确且已验证的DNS记录,并且mailgun在所有方面都具有绿色复选标记。

config/mail.php

return [
'driver' => 'mailgun',
'host' => 'smtp.mailgun.org',
'port' => 587,
'from' => [
    'address' => 'orders@domain.com',
    'name' => 'Company Name'
],
'encryption' => 'tls'),
'username' => 'orders@mg.domain.com',
'password' => 'xxxxd663hd02j727bb2eefd1ea38bbe0-58bc211a-670xxxx'
];

配置/services.php

'mailgun' => [
    'domain' => 'https://api.mailgun.net/v3/mg.domain.com',
    'secret' => 'xxxxehbe8v25g3374e5as3ff32a45995-39bc661a-4716xxxx',
],

控制器

use Illuminate\Support\Facades\Mail;

$data = [
        'email' => 'email@yahoo.com',
        'name' => 'Bob Smith'
    ];

    $body_data = [
        'id' => '1234'
    ];

    Mail::send('emails.shipped', $body_data, function($message) use ($data)
{
    $message->to($data['email'], $data['name'])->subject('Test Email');
});

当我把邮件驱动程序更改为日志记录并检查日志文件时,一切看起来都很好。所有东西看起来都完美,我以前在 Laravel 5.5 上使用过 mailgun,没有任何问题。

我还尝试了新的 laravel 构建方法,但出现了相同的问题。

我没有收到任何错误消息,我在 apache2 上检查了日志,mailgun 中也没有任何日志出现,在收件箱或垃圾邮件中当然也没有收到任何电子邮件。

我的问题是,我漏掉了什么吗?我还能做什么其他的故障排除吗?似乎我的应用程序没有正确连接到 mailgun。


Laravel日志显示了什么?另外,在您的配置文件中,'encryption'行的末尾似乎有一个拼写错误。 - Kenny Horna
@HCK 哦,我看到了那个错别字。那只是复制/粘贴并发布在这里的结果。 - Chad Priddle
@HCK 在laravel.log里没有任何记录。我只是把驱动器切换到“log”,然后电子邮件内容/标题就如预期一样出现了。 - Chad Priddle
5个回答

12
我认为在您的 config/services.php 文件中,mailgun.domain 应该更像是 mg.domain.com(或者如果是开发环境,则为 sandboxXXXXXXX.mailgun.org),而不是您设置的类似网址的格式。

0

尝试放置:

'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 

在你的 mailgun 数组中。


0

我正在使用 Laravel 5.8,并且它与所有默认配置一起工作。

.env

MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=sandbox8a408833ad1540e7b3a5d0151f606531.mailgun.org
MAILGUN_SECRET=92df7e85eeeaccaeae3d3b3164600666-87cdd773-8c819599

web.php

Route::get('send_test_email', function(){
    Mail::raw('Sending emails with Mailgun and Laravel is easy!', function($message)
    {
        $message->to('your_test_email@gmail.com');
    });
});

services.php

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

0

我曾经为这个问题(laravel + mailgun)苦苦挣扎了整整一天。

最终,以下方法解决了我的问题。希望对你有所帮助!

MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=mail.mydomain.com
MAILGUN_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxx
MAIL_FROM_ADDRESS=kp@mydomain.com
MAIL_FROM_NAME='KP'

在 routes/web.php 文件中:
Route::get('/tst', function(){
    Mail::raw('Sending emails with Mailgun and Laravel is easy!', function($message)
    {
        $message->to('kp@yahoo.com', 'K P')->subject('Hello there, how are you?');
    });
    echo "string";
});


注意:您需要确保设置了您的MAILGUN_DOMAIN,并且MX / DNS记录存在于您的服务器/域中。这可能需要最多24小时才能传播(可悲的是,这是最烦人的部分)。但这些都是您需要的所有设置。

0

您可以尝试在您的服务器上安装SwiftMailer库。

sudo apt install -y php-swiftmailer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接