【问题标题】:Unable to resolve NULL driver for [Illuminate\Mail\TransportManager]无法解析 [Illuminate\Mail\TransportManager] 的 NULL 驱动程序
【发布时间】:2023-03-20 18:18:01
【问题描述】:

我收到此错误 InvalidArgumentException Unable to resolve NULL driver for [Illuminate\Mail\TransportManager] on Laravel 5.6,我在本地机器和互联网测试网站上都遇到了这个问题。我开始只使用带有 smtp 的 gmail 并且遇到了一些登录问题,所以我遇到了 mailgun 并用它设置了所有东西。我已经设置了我的 .env 文件(测试网站正确地将驱动程序显示为 mailgun)

MAIL_DRIVER=log
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=USERNAME
MAIL_PASSWORD=PWD
MAIL_ENCRYPTION=tls

我的配置/邮箱如下

'mailgun' => [
    'domain' => 'domain',
    'secret' => 'key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
],

'host' => env('smtp.mailgun.org', 'smtp.mailgun.org'),

'port' => env('587', 587),

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

'encryption' => env('MAIL_ENCRYPTION', 'tls'),

'username' => env('uname'),

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

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

'markdown' => [
    'theme' => 'default',

    'paths' => [
        resource_path('views/vendor/mail'),
      ],
    ],

  ];

配置/服务是

 'mailgun' => [
    'domain' => env('domain'),
    'secret' => env('key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'),
  ],

  'ses' => [
    'key' => env('SES_KEY'),
    'secret' => env('SES_SECRET'),
      'region' => 'us-east-1',
  ],

  'sparkpost' => [
    'secret' => env('SPARKPOST_SECRET'),
  ],

  'stripe' => [
      'model' => App\User::class,
      'key' => env('STRIPE_KEY'),
       'secret' => env('STRIPE_SECRET'),
  ],

  ];

自从添加这些东西后,我就遇到了问题。我正在获取日志文件的输出,正如我之前提到的,在使用 gmail smtp 时,我没有收到此驱动程序错误。我已经使用 maiables 尝试了 laravel 文档,但没有帮助。我使用此链接https://scotch.io/tutorials/easy-and-fast-emails-with-laravel-5-3-mailables 作为指南,即使这样我也遇到了同样的错误。我在路线上做了一个 dd

  Route::get('test', function(){
  dd(Config::get("mail"));
  Mail::raw('Sending emails with Mailgun and Laravel is easy!',        function($message)
  {dd(Config::get("mail"));
    $message->to('email@email.email');
    });
});

结果如下

  array:9 [▼
 "mailgun" => array:2 [▼
  "domain" => "domain"
  "secret" => "key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  ]
  "host" => "smtp.mailgun.org"
  "port" => 587
  "from" => array:2 [▼
   "address" => "hello@example.com"
  "name" => "Example"
 ]
"encryption" => "tls"
"username" => null
"password" => null
"sendmail" => "/usr/sbin/sendmail -bs"
"markdown" => array:2 [▼
"theme" => "default"
"paths" => array:1 [▶]
  ]
]

诚然,我是 Laravel 的新手,所以我非常渴望尝试解决这个问题,因为这是最好的学习方式,但即使是谷歌,我个人也没有找到很多帮助,所以我联系了一些专家在这里。先感谢您。

【问题讨论】:

  • 你在哪里使用配置?我可以把它扔掉,但你实际在哪里以及如何使用它?
  • 您好,我在路由文件夹下的 web.php 中有配置转储,我只是指向一个测试页面进行故障排除。我要通过的资源之一是转储结果并查看正在完成的输出。我试图通过并放置与此相关的所有代码。

标签: laravel email


【解决方案1】:

复制内容 this 到你的 config/services.php 和 this 到你的 config/mail.php

并将其添加到您的 app.php 的末尾

$app->configure('services');    
$app->configure('mail');

【讨论】:

    【解决方案2】:

    如果你想使用 Mailgun,你应该在你的 .env 中改成这个:

    MAIL_DRIVER=mailgun
    

    这会告诉 Laravel 使用来自 config/services 的配置:

    'mailgun' => [
        'domain' => 'domain',
        'secret' => 'key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    ],
    

    编辑:

    将您的 config/email.php 更改为 this。复制粘贴替换当前配置中的所有内容,错误应该得到解决。您应该对 config/services.php 执行相同操作 - 从 here 复制。

    原因:您从配置中删除了 'driver' => env('MAIL_DRIVER', 'smtp'), 行,Laravel 无法解析驱动程序。

    即使您只是添加此行,您也会因为这些行而遇到更多错误:

    'username' => env('uname'),
    
    'password' => env('pwd'),
    

    env(..) 函数的第一个参数是在.env 文件中的哪一行查找变量。如果在.env 中找不到变量,则第二个是默认值。您的环境中没有变量 unamepwd (至少从您显示的内容来看)。而且您也不提供默认值。

    长话短说,不要编辑您的邮件配置,而是编辑.env 文件中的变量。

    【讨论】:

    • 我确实在我的测试站点上设置了它,那是在一个实时站点上,我得到了同样的错误
    • 我明白了,我编辑了答案。那应该会为您解决。
    • 这就是 devk,我相信你知道 :) 这解决了我的错误,我知道它是这样的。我有过度编辑的东西。就像我说的那样,我正在学习 Laravel,你做了一项有价值的服务并教会了我更多。所以谢谢你,这是我的解决方案。
    • 很高兴我们解决了它!请给我漂亮的绿色解决标记:)
    猜你喜欢
    • 2019-03-08
    • 2020-10-19
    • 2020-09-08
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2019-07-14
    相关资源
    最近更新 更多