Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分

Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分

https://blog.csdn.net/wulove52/article/details/71172842

Laravel集成了SwiftMailer库进行邮件发送邮件配置文件位于config/mail.PHP:、

 

[python] 
view plain 
copy

 

  1. return [  
  2.     ‘driver’ => env(‘MAIL_DRIVER’‘smtp’),  
  3.     ‘host’ => env(‘MAIL_HOST’‘smtp.mailgun.org’),  
  4.     ‘port’ => env(‘MAIL_PORT’587),  
  5.     ‘from’ => [‘address’ => null, ‘name’ => null],  
  6.     ‘encryption’ => env(‘MAIL_ENCRYPTION’‘tls’),  
  7.     ‘username’ => env(‘MAIL_USERNAME’),  
  8.     ‘password’ => env(‘MAIL_PASSWORD’),  
  9.     ‘sendmail’ => ‘/usr/sbin/sendmail -bs’,  
  10.     ‘pretend’ => false,  
  11. ]  


  以上的参数  我们都会有详细的讲解!  请继续往下看!

driver用于配置默认的邮件发送驱动,Laravel支持多种邮件驱动方式,包括smtpMailgunMaildrillAmazon SESmailsendmail,Mailgun和Amazon SES都是收费的,Maildrill目前不支持中国区用户,这三个都是第三方邮件服务。mail驱动使用PHP提供的mail函数发送,sendmail驱动通过Sendmail/Postfix(Linux)提供的命令发送邮件,smtp驱动通过支持ESMTP的SMTP发送邮件。

注:ESMTP即Extended SMTP, 是对标准 SMTP 协议进行的扩展,它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。

就目前状况来看,使用smtp是最明智的选择,mail不安全,sendmail需要安装配置Sendmail/Postfix,其他要么付费要么不能用(汗!)。下面其它配置的说明都基于driversmtp

接下来其他的配置都好理解,host是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com,使用QQ邮箱的话,对应值是smtp.qq.com

port用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465

from配置项包含addressname,前者表示发送邮箱,后者表示发送邮件使用的用户名。

encryption表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls/ssl

username表示邮箱账号,比如yaojinbu@163.com

password表示上述邮箱登录对应登录密码。

sendmail是在设置driversendmail时使用,用于指定sendmail命令路径。

pretend用于配置是否将邮件发送记录到日志中,默认为false则发送邮件不记录日志,如果为true的话只记录日志不发送邮件,这一配置在本地开发中调试时很有用。

 // 接下来我们要做的就是要在控制器写代码了!

use Mail;

在方法中需要写以下!

[python] 
view plain 
c

     public function send()  
        {  
            $name = 'vilin';  
            $flag = Mail::send('emails.test',['name'=>$name],function($message){  
                $to = '1072155122@qq.com';  
                $message ->to($to)->subject('测试邮件');  
            });  
            if($flag){  
                echo '发送邮件成功,请查收!';  
            }else{  
                echo '发送邮件失败,请重试!';  
            }  
        }  

//Mail::send需要传递三个参数,第一个是邮件视图,第二个是传入视图的数据,第三个是一个闭包,该闭包中定义了收件人、抄送人(如果有的话)、邮件主题、附件等信息。邮件的主体内容位于局部视图中,下面我们就来定义这个局部视图,在resources/views/admin目录下新建test.blade.php,编辑其内容如下:
//  以上是单纯的文本发送/!  但是还不是带有图片发送的格式!  需要发送图片的格式的!  需要继续往下继续看!

图片的发送! 

//这里是view成! 需要一下这么输入!

{
    {$name}},这是一封测试邮件
<br>
<img src="{
    {$message->embed($imgPath)}}">

//  图片的发送和文本的发送  没有什么其他不一样的!   而是在参数后面多写了一个参数! 一个简单的图片发送的文件就好了!

$name = 'vilin';
$imgPath = 'http://laravelacademy.org/wp-statics/images/carousel/LaravelAcademy.jpg';
$flag = Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){
   

1.1 laravel发送邮件涉及的配置文件

    .env
    /config/mail.php

以上是laravel发送邮件两个配置的地方,默认使用composer生成项目的时候,自动生成.env文件里会有邮箱的配置字段,如下:

    MAIL_DRIVER=smtp
    MAIL_HOST=mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null

以上这个几个字段在mail.PHP文件中都有对应的字段,如果部署上线,仅仅配置了mail.php而没有改.env文件里的配置(除非没有.env),那么邮箱是发送不成功的,因为.env文件会覆盖mail.php文件字段,切记小心。

1.2 使用QQ邮箱smtp发送邮件问题

1.2.1 开启QQ邮箱smtp和imap功能

在使用这个QQ邮箱发送之前你需要在所要发送邮箱的后台开启smtp和imap发送邮箱授权功能,否则将一直提示你没有授权。如果想要显示发送的记录,则需要设置收取选项。设置位置,直接上图:

Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分

至少你需要把POP3/SMTP服务开启,不然发邮件那是天方夜谭啊。

开启后,你还需要点击下方的:“生成授权码”,获取一个能够登录的动态密码:

Laravel5.2 发送邮件(smtp方式最简单的讲解!)-邮件部分

千万千万千万记得,MAIL_PASSWORD填写的并非是发送邮箱的账号密码,而是到腾讯邮箱管理中心授权的动态密码!!!

加密方式建议选择选择ssl保证数据安全,那么最终.env邮件长这样:

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=465
    MAIL_USERNAME=[你的账号]
    MAIL_PASSWORD=gzoyimtltnqsbdba
    MAIL_ENCRYPTION=ssl

 

mail.php配置文件中,你仅仅需要修改from字段

    return [
    'from' => ['address' => [MAIL_USERNAME], 'name' => '小王']
    ]

然后你就可以愉快大发邮件啦:

5.2 发送邮件方式

\Mail::send('mail.index', [], function ($message) { $message->to(['chengxuyuan@qq.com'])->subject('公司未婚妹子数量报表统计');});

从5.3开始,发送邮件被抽象成了一个对象,如果使用laravel 5.3尝鲜的,请移步官方最新文档: https://laravel.com/docs/5.3/mail

//代码实现例子

 $data = [];    
$flag = \Illuminate\Support\Facades\Mail::to('panxlmail@qq.com')->send(new \App\Mail\UserMail($data));
if($flag) {
echo '发送失败';
} else {
echo '发送成功';
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113082.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NFV指的是_以致和以至的区别

    NFV指的是_以致和以至的区别这几年由于网路虚拟化技术的快速发展,很多网元设备都从传统的特定硬件转到通用硬件上的软件形态,那NFV和VNF这两个概念是有什么区别呢?NFV指网路功能虚拟化技术,通过IT虚拟化,实现传统通信网络的功能;VNF就是虚拟出来的一个个网元,实现某个网络功能单元,NF;NFV发展分为初级和高级阶段;初级阶段是基于传统硬件的软件执行环境转换为基于通用硬件的VM的专用虚拟化环境…

    2022年9月6日
    1
  • Charles打断点修改请求数据&响应数据

    Charles打断点修改请求数据&响应数据

    2021年7月13日
    296
  • Matlab中弧度转角度、角度转弧度

    Matlab中弧度转角度、角度转弧度Content弧度转角度角度转弧度弧度转角度rad2deg()函数可以用于将弧度转为角度示例:角度转弧度deg2rad()函数可以用于将角度转换为弧度。示例:

    2022年6月15日
    65
  • java并发编程实战wwj———————-第一阶段————–27-28-29-30

    java并发编程实战wwj———————-第一阶段————–27-28-29-30代码:chapter9sleep:是Threa的方法,sleep不释放锁,sleep不用synchronized,不需要被唤醒。wait:所有对象的方法,wait释放锁,用synchronized,要被唤醒。如何使用这个案例:切换m1和m2方法。packagechapter9;importjava.util.stream.Stream;/************…

    2022年9月27日
    0
  • Android应用开发揭秘11

    Android应用开发揭秘11Android应用开发揭秘11

    2022年5月20日
    31
  • redisson读写锁使用场景_Redisson酒店

    redisson读写锁使用场景_Redisson酒店读写锁一次只有一个线程可以占有写模式的读写锁,但是可以有多个线程同时占有读模式的读写锁.正是因为这个特性,当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是如果线程希望以写模式对此锁进行加锁,它必须直到所有的线程释放锁.通常,当读写锁处于读模式锁住状态时,如果有另外线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式

    2022年8月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号