Laravel 邮件发送功能实现

背景

  • 近期在接触传说中最优雅的 PHP 框架——Laravel,学习了一下邮件发送功能,在此分享一下,其中,我使用的框架版本为 5.2.45,参考时请注意差别.
  • 对于 ThinkPHP 框架框架的邮件发送可参考文章 ThinkPHP 框架下邮件发送功能
别激动,我就是个背景图而已

功能开发过程

  • 此处以 网易(163.com)邮箱为例。

一、前期准备

1).首先对 STMP 的知识稍作了解
STMP 简介 《百度百科》

2).开启邮箱 STMP 服务

以 163.com 邮箱为例,点击上方导航栏的“设置”,选择“POP3/SMTP/IMAP”进行下面的设置,着重记下服务器地址(SMTP服务器:smtp.163.com)

然后点击“客户端授权密码”进行权限设置,一般会进行短信的验证,并记录下自己设定的授权登录密码,后面的代码中需要用到。

二.代码实现

1).修改配置文件 mail.php
  • 文件位置位于 config/mail.php
  • 修改其中的 “from” 信息,以本人为例,address 为发送方邮箱账号,name 为称谓
 'from' => ['address' => '1xxxxxxx@163.com', 'name' => '逗比2号'],
2).修改项目根目录下的配置文件 .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=1xxxxxxx@163.com
MAIL_PASSWORD=xxxxx
MAIL_ENCRYPTION=null
  • 注意配置信息的填写:MAIL_USERNAME,MAIL_PASSWORD为前期准备中记下的163邮箱账号及客户端授权密码(非登录密码)
  • MAIL_PORT 为默认端口号,如果配置 MAIL_ENCRYPTION = ssl 时,端口号需要更改为 465
3).补充路由信息
Route::any('mail', 'HomeController@mail');
4).控制器代码编写
  • 基本的代码编辑如下
  • 注意,本人发现网上的介绍有出入,有的是使用 Mail 类,推测应该是版本不同的原因,此处针对 5.2.45 版本进行测试
namespace App\Http\Controllers;
use Illuminate\Mail\Mailer;
class HomeController extends Controller
{
    private $mailer;
    public function __construct(Mailer $mailer)
    {
        $this->mailer = $mailer;
    }
    /**
     * 发送邮件 此方法选择进行邮件发送的方式
     */
    public function mail(){
       
        $tag = $this->sendText();
        //$tag = $this->sendHtml();
        //TODO  $tag 判断发送是否成功,进行后续代码开发
    }
    /**
     * 发送纯文本 邮件
     */
    public function sendText(){
        $tag = $this->mailer->raw('从前的日色变得慢 车 马 邮件 都慢',function ($message){
            $message->subject('这是邮件主题,希望您能支持');
            $message->to('9xxxxxxx@qq.com');
        });
        return $tag;
    }
    /**
     * 发送自定义网页
     */
    public function sendHtml(){
        $data = ['title' => '你若盛开,清风自来','author' => '木心'];
        $tag = $this->mailer->send('mail',$data,function ($message){
            $message->subject('Hello My Dear,let`s go');
            $message->to('9xxxxxxxx@qq.com');
        });
        return $tag;
    }
}

三、代码说明

1).方法 sendText()
  • 此方法为发送纯文本邮件的功能实现,调用此方法发送的邮件截图如下:
2).方法 sendHtml()
  • 此方法为自定义格式邮件发送的功能实现
  • 实现的前提需要有设计界面,代码中举例为我简单设计的 mail.blade.php 参考代码如下:
<html>
<style>
    *{
        font-family: 楷体;
    }
</style>
<h2>{{$title}}</h2>
![]({{asset('uploads/20170902/59aa05723e35d.jpg')}})
<pre>
      从前的日色
        变得慢
      车 马 邮件
         都慢
    一生只够爱一个人
                --{{$author}}
</pre>
</html>
  • 调用此方法发送的邮件截图如下:

补充

1).另一种简单写法

  • 其实可提供一种更简单的写法,与上面所处理的raw(),send()方法类似,举例:
use Illuminate\Support\Facades\Mail;

$tag = Mail::raw('你好,我们已经准备好了',function ($message){
            $message->to('9xxxxxxxxxx@qq.com');
        });
  • 不过,测试发现会有如下报错:
FatalErrorException
 in ClassLoader.php line 373:Maximum function nesting level of '100' reached, aborting!
  • 但是前面的第一种代码方案,不会出现此问题,并且邮件发送响应快一些(或许错觉),然而,此代码如果放在队列中执行,测试发现不做任何修改也是可以实现...

  • 原因和解决方案,请参考文章 - PHP中的函数嵌套层数限制

2).554 邮件发送报错

  • 有时邮件发送时,会有如下报错,例如 554 多表示邮件发送过多被系统禁止了,具体信息可通过提示信息中的网址进行查询.
开发测试中的报错信息 参考
554 报错查询结果
  • 具体代码可自行优化,有问题建议多多谷歌,还是能帮到不少忙的.
  • See you !
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容