无法解析[Illuminate \ Mail \ TransportManager]

时间:2018-05-12 01:31:54

标签: laravel email

我收到此错误InvalidArgumentException无法在Laravel 5.6上解析[Illuminate \ Mail \ TransportManager]的NULL驱动程序,并且我在本地计算机和测试网站上都遇到此问题。我开始只使用带有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'),
      ],
    ],

  ];

config / services是

 '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的新手所以我非常渴望尝试解决这个问题,因为这是学习的最好方法,但即便谷歌我个人也没有找到很多帮助,所以我接触了一些SO的专家们。先感谢您。

2 个答案:

答案 0 :(得分:1)

如果您想使用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文件中的变量。

答案 1 :(得分:0)

在您的config / services.php中复制内容this,在您的config / mail.php中复制this

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

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