【问题标题】:laravel with mailgun set uplaravel 与 mailgun 设置
【发布时间】:2019-08-01 23:13:41
【问题描述】:

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

我需要使用 MailGun API,这样我就可以从我的 localhost 以及从 test 和 prod + 发送电子邮件,因为 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. 沙盒“到”电子邮件已验证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

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

【问题讨论】:

  • 查看@kopz 的回答,没错,你需要在邮件配置文件上使用 .env 文件常量,实际上,你永远不需要更改 config/Mail,只需要在 .env 上指定常量。 .env 文件。
  • 是的,这部分是我已将键重命名为值的问题,但我是在玩了花里胡哨之后才发现的。主要问题是为什么在我的配置中出现 MAIL_FROM_NAME: John Doe 和冒号,我没有收到来自 laravel 或来自 artisan config:cache 的任何错误。当我看到它时,将冒号更改为 = 然后删除了缓存,工匠说我“嘿,你不能在配置中有空格”,一旦删除了空格,一切都开始工作了
  • 很高兴,您的问题已经解决了。

标签: laravel laravel-5 mailgun


【解决方案1】:

_HOST_PORT_USERNAME_PASSWORD_ENCRYPTION 环境变量仅适用于 SMTP。

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

_DOMAIN_SECRET 仅适用于您设置了 MAIL_DRIVER=mailgun(即 mailgun api)的情况,这意味着您不再不再使用 SMTP 驱动程序了。

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

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

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

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

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

【讨论】:

  • 我没有将电子邮件添加到已验证 - 谢谢,但主要问题是我在配置中遇到了 MAIL_FROM_NAME: John Doe 并且 laravel 没有警告我配置错误。一旦我修复它,一切都会正常工作:(
【解决方案2】:

您需要使用您的 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 文件中设置的名称,第二个(可选)参数是未找到第一个值时的默认值。

【讨论】:

  • 是的,这部分是我已将键重命名为值的问题,但我是在玩了花里胡哨之后才发现的。主要问题是为什么在我的配置中出现了带有冒号的MAIL_FROM_NAME: John Doe,而我没有收到来自 laravel 或来自artisan config:cache 的任何错误。当我看到它时,将冒号更改为 = 然后删除了缓存,工匠说我“嘿,你不能在配置中有空格”,一旦删除了空格,一切都开始工作了
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多