欢迎各位兄弟 发布技术文章
这里的技术是共享的
Class mailer does not exist
-- 这个是由于没有注册mailer
导致的。
Missing argument 1 for Illuminate\Support\Manager::createDriver(), called in .../vendor/illuminate/support/Manager.php on line 87 and defined
-- 没有mail.*
相关的配置导致的,要记得加载下配置文件 —— Lumen
中的配置文件不会自动加载的!有没有觉得特坑!
Connection to tcp://手动打码:465 Timed Out
-- 邮件配置参数中的mail.encryption
不正确导致的。现在好多网站都开启了SSL,要用ssl
.composer require illuminate/mail
composer require guzzlehttp/guzzle
composer require jeremeamia/SuperClosure
其中,illuminate/mail
提供了最关键的Mailer
,如果想通过把邮件放到队列里面,则需要安装jeremeamia/SuperClosure
。
config/mail.php
配置文件,里面的内容形如下:<?php return [ 'driver' => "smtp", 'host' => "smtp.xxxxmail.com", // 根据你的邮件服务提供商来填 'port' => "465", // 同上 'encryption' => "ssl", // 同上 一般是tls或ssl 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS'), 'name' => env('MAIL_FROM_NAME'), ], ];
其中有一些用户名和密码之类的,我就直接放到环境变量里面了,防止误提交到版本库里面造成安全隐患。
p.s.如果放到环境变量里面,则在.env
中添加对应的值。勿忘。
mailer
-- 在bootstrap/app.php
中, return $app;
之前,增加以下内容:$app->singleton('mailer', function () use ($app) {
return $app->loadComponent('mail', Illuminate\Mail\MailServiceProvider::class, 'mailer');
});
有人也许会问,为啥不能直接$app->register( Illuminate\Mail\MailServiceProvider::class)
? 一开始,我也是直接这样做的,然后就遇到了坑#2 -- Lumen
中不像Laravel
,配置文件不会自动加载,所以这个地方建议使用loadComponent来搞,或者也可以自行加载对应的mail.*
配置。
use Illuminate\Support\Facades\Mail;
Mail::send('emails.welcome', ['key' => 'value'], function($message)
{
$message->to('我的QQ@qq.com', '我')->subject('Welcome!');
});
啥?出现了View [emails.welcome] not found
的错误? 肯定是你忘了加对应的视图文件了,请自行添加resources/views/emails/welcome.php
.