laravel 设置了 mailgun

laravel with mailgun set up

我尽我所能阅读 看起来我根据文档(和互联网)设置并填写了所有内容,但仍然无法收到任何电子邮件。

我需要使用 MailGun API 这样我就可以从本地主机以及测试和产品发送电子邮件 + 因为 25 端口通常关闭。

我尽我所能填写,以防奇迹发生(在 .env 中的 smtp/mailgun 之间变化)

我已经尝试了我的真实服务器设置,当我失败时也尝试过没有任何成功的沙箱。

我的 mailgun 数据访问(隐藏了一些字母):

  1. 我的 mailgun 沙箱服务器 http://i.imgur.com/XCi8Hkn.png

  2. 当我点击它时,我可以在 API 和 SMTP
    之间进行选择 2.1 在 API 选项卡中我有 API KEY: http://i.imgur.com/xGSq7aF.png
    2.2 在 SMTP 框中我有 smtp 主机、端口、登录名、密码:http://i.imgur.com/t5Pi6lH.png

  3. 我的.env:
MAIL_DRIVER=mailgun

MAILGUN_DOMAIN=sandbox8ffe89553e224c468f4ad0cf6b4da3c2.mailgun.org
MAILGUN_SECRET=b3ff30bxxxxxxxxxxxxxxxx087d-f877bd7a-01ecceaa

在互联网某处发现 MAILGUN_DOMAIN & MAILGUN_SECRET 可以在 .env 中添加,所以也可以在这里尝试

  1. config/mail.php
    'driver' => env('MAIL_DRIVER', 'mailgun'),
  1. app/mail/Test.php
    public function build()
    {
        return $this->from('support@sandbox8ffe89553e224c468f4ad0cf6b4da3c2.mailgun.org')
                    ->subject('HELLO')
                    ->view('test');
    }
  1. 沙盒"to" 电子邮件已验证http://i.imgur.com/tDhgLcT.png

  2. TestController

use App\Mail\Test;
use Illuminate\Support\Facades\Mail;

class TestController extends Controller
{
    public function test()
    {
        echo 'hello';

        try {
            Mail::to('myaddress@gmail.com')->send(new Test());
        } catch  (\Exception $e) {
            dump($e);
        }

        echo 'hello2';

    }
}

  1. resources/views/test.blade.php
hello
  1. 还在用以防万一
> artisan cache:clear
> artisan config:cache
> artisan cache:clear

9

请帮忙,缺少什么?我做错了什么?

您需要使用您的 ENV 设置的名称。在您的情况下,例如,您是用户名,试图获取一个名为 'postmaster@sandbox8ffexxxxxxxxxxd0cf6b4da3c2.mailgun.org' 的环境变量,该变量当然不存在。

'driver' => env('MAIL_DRIVER', 'mailgun'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => [
    'address' => env('SUPPORT', 'hello@example.com'), //if SUPPORT env does not exist, default to hello@example.com
    'name' => env('NAME', 'Example'),
],
'username' => env('MAIL_USERNAME'),

'password' => env('PASSWORD'),

当使用 env 时,第一个参数即。 ENV_NAME 是您在 .env 文件中设置的名称,第二个(可选)参数是找不到第一个值时的默认值。

_HOST_PORT_USERNAME_PASSWORD_ENCRYPTION 环境变量仅适用于 SMTP。

为此,您的 MAIL_DRIVER 应设置为 SMTP,我刚才提到的五个值指向您的 mailgun 值。

_DOMAIN_SECRET只适用于你设置了MAIL_DRIVER=mailgun(也就是mailgunapi)的情况,也就是说你是不再使用 SMTP 驱动程序。

基本上您有一个选择:选择 SMTP 并将其指向 mailgun(设置 MAIL_DRIVER=smtp,或 mailgun API(设置 MAIL_DRIVER=mailgun)。

我想如果你仔细想想,直到你明白这两者之间的区别,那么你应该能够解决它。

此外,在沙盒域中,除非您将收件人地址添加为经过验证的电子邮件,否则您无法发送真实电子邮件。您可以在 mailgun 仪表板上执行此操作。这可能就是导致这里问题的原因(毕竟它是一个沙箱 - 它意味着安全,所以你不会不小心发送到你没有通过特定地址的电子邮件验证明确选择加入的实时电子邮件地址) .

另一个提示,进入 tinker 并输入 config('mail'),您将看到框架选择了什么。然后你就不必调整实际的配置文件,如果你看到你想要放在那里的值肯定在那里。

我刚刚也注意到你上面列出的配置文件是错误的。你有 'driver' => env('mailgun', 'mailgun'), 那是行不通的(如果你在 tinker 中执行 config('mail') 就会看到)。 env() 函数采用环境变量的名称(如 MAILGUN_DOMAIN 或 MAILGUN_SECRET 作为其第一个参数,第二个参数是默认值,如果该名称的 shell 环境变量没有不存在)。