/**
 * 这里主要是想通过自己搭建smtp服务器,配置laravel5.2框架,实现邮箱发邮件功能,
* 主要内容是搭建smtp服务器,laravel5.2发邮件顺手提一下
*/ /**
* 1.laravel5.2通过Mail实现发邮件的功能
* 2.搭建自己的smtp服务器
* 3.修改mail的配置,将主机和账号修改为自己的smtp代理服务器
*
* 相关技术基础(php基础知识、laravel5.2框架的简单操作、Linux运维基础知识)
*/ /**
* 1.laravel5.2通过mail实现发邮件的功能
*
* 首先修改config里面关于mail的配置文件
* vim ./config/mail.php
return [
'driver' => 'smtp',
'host' => 'smtp.exmail.qq.com',
'port' => 465,
'from' => ['address' => 'anywhere', 'name' => '云享客'],
'encryption' => 'ssl',
'username' => 'myaccount@domain.com',
'password' => 'mypasswd',
'sendmail' => '/usr/sbin/sendmail -bs',
];
* driver是驱动为smtp,
* host就是smtp代理服务器,我有一个腾讯企业邮箱的账号,腾讯企业邮箱的smtp是smtp.exmail.qq.com
* port是465,encryption是ssl,这个是腾讯smtp服务器相关的,一般在邮箱的安全设置里面可以找到这些
* from里面的address可以随便写,name也是,这个属于邮件部分,跟发送影响不大
* username和password就是腾讯企业邮箱的账号,
* 有了这些配置之后,可以直接在控制器里面调用mail的send方法发送邮件。
*
*
* vim ./app/Http/Controllers/MailController.php
use Illuminate\Support\Facades\Mail;
//sendMail function
private function sendMail()
{
$name = $this->name;
$userid = $this->userid;
$token = $this->token;
$time = $this->time;
$telplate = $this->telplate;
$email = $this->email; $flag = Mail::send($telplate,['name'=>$name,'userid'=>$userid,'email'=>$email,'token'=>$token,'time'=>$time],function($message){
$to = $this->email;
$message ->to($to)->subject('your subject');
});
if($flag){
return true;
}else{
return false;
}
}
*
* 邮件发送的核心就是Mial::send();
* 其中$telplate就是邮件的详细内容部分,可以通过html和css定义为任意的样式,很灵活。
* 接着一个数组就是$telplate的参数部分,
* $to是发送到的邮箱地址,
* subject是邮件主题
* 模板同样放在views里面。比如$this->telplate = 'email.index',就是./resouces/views/email/index.blade.php
* 通常需要传递到模板的参数至少有时间,用户标识和token,
* 时间用来控制链接生效时间,token避免违法请求,用户唯一标识在用户认证激活的时候用来分辨是属于哪个用户。
* 这里只是达到发邮件的目的,其他内容在laravel框架分类里面会提及。
*/ /**
* 2.搭建自己的smtp服务器
* (在上面的配置里面,我们使用的smtp服务器是腾讯的企业邮箱代理服务器,
* 第三方的免费使用的代理服务器会有一些限制,比如说条数内容的限制,我们想搭建一台自己的
* smtp服务器来替代smtp.exmail.qq.com)
*
* 首先需要有一台物理主机,不管是租云服务器或者是去中关村买一台,根据需要自己配置。
* 我这里是租了一台测试版的阿里云ecs,可以满足我的简单的发邮件需求。
* 我的阿里云ecs装的centos6.5操作系统,现在我们一步一步的搭建配置我们自己的smtp服务器。
*
* 需要确定我们将使用postfix代替sendmail发送邮件,具体原因有很多,不赘述。
*
*
* 通过yum安装postfix dovecot cyrus-sasl
* 修改postfix的配置文件
* vim /etc/postfix/main.cf
*
* myhostname=test.mail.com
*
* mydomain=mail.com
*
* myorigin = $mydomain
*
* inet_interfaces = $myhostname,localhost
*
* inet_protocols = ipv4
*
* mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
*
* mynetworks = 0.0.0.0/0
*
* 加上以下配置禁止不验证就发送
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
#smtpd_sender_restrictions = permit_mynetworks,reject_unauth_sender,reject_authenticated_sender_login_mismatch,reject_sender_login_mismatch
smtpd_sender_restrictions = permit_sasl_authenticated,reject_authenticated_sender_login_mismatch,reject_sender_login_mismatch
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_non_fqdn_hostname,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_invalid_hostname,reject_unauth_destination
*
* 重启postfix:service postfix restart;
* failed, tail /var/log/maillog 报错host无法识别
* vim /etc/host 添加主机解析到域名:
* 121.xxx.xxx.xxx test.mail.com
* 121.xxx.xxx.xxx mail.com
* service postfix restart ok了
*
* 测试telnet 121.xxx.xxx.xxx 25
* Trying 121.xxx.xxx.xxx...
* Connected to 121.xxx.xxx.xxx.
* Escape character is '^]'.
* 220 test.mail.com ESMTP Postfix postfix
* ehlo mail.com
* 250-test.mail.com
* 250-PIPELINING
* 250-SIZE 10240000
* 250-VRFY
* 250-ETRN
* 250-AUTH PLAIN LOGIN
* 250-ENHANCEDSTATUSCODES
* 250-8BITMIME
* 250 DSN
* mail from:12223
* 250 2.1.0 Ok
* rcpt to:yhy19921013@163.com
* 504 5.5.2 <12223>: Sender address rejected:
* need fully-qualified address
*
* 这里被拒绝提示需要认证账号,因为我在配置文件里面做了这样的要求
* 我们新建用户
* useradd mymailer
* passwd mymailer
*
* 在用户模板下面创建用户邮箱目录授予700权限
* mkdir /etc/skel/Maildir
* chmod 700 /etc/skel/Maildir
*
* 为用户创建邮箱目录授予700权限,并将邮箱目录设置为用户所有
* mkdir /home/mymailer/Maildir
* chmod 700 /home/mymailer/Maildir/
* chown mymailer Maildir/
*
* 为用户设置smtp认证密码
* saslpasswd2 -u 121.42.148.193 -c mymailer
*
* 改变sasl的属性和所属组
* chgrp postfix /etc/sasldb2
* chmod 640 /etc/sasldb2
*
* 修改smtp.com,不使用系统用户密码作为用户的SMTP认证密码
* vim /etc/sasl2/smtpd.com
* pwcheck_method: auxprop
*
* 修改sasl配置
* vi /etc/sysconfig/saslauthd
* #MECH=pam
* FLAGS=sasldb
*
* 重启相关服务
* /etc/rc.d/init.d/saslauthd start
* service postfix restart
*
* 在本地
* [root@iZ28gk7b2avZ mymailer]# telnet test.mail.com 25
* Trying 121.xxx.xxx.xxx...
* Connected to test.mail.com.
* Escape character is '^]'.
* 220 test.mail.com ESMTP Postfix postfix
* ehlo mymailer
* 250-test.mail.com
* 250-PIPELINING
* 250-SIZE 10240000
* 250-VRFY
* 250-ETRN
* 250-AUTH PLAIN LOGIN
* 250-ENHANCEDSTATUSCODES
* 250-8BITMIME
* 250 DSN
* auth login
* 334 VXNlcm5hbWU6
* bXltYWlsZXI=
* 334 UGFzc3dvcmQ6
* MTIzNDU2
* 235 2.7.0 Authentication successful
* mail from:mymailler@mail.com
* 250 2.1.0 Ok
* rcpt to:xxxxxxx@qq.com
* 250 2.1.5 Ok
* data
* 354 End data with <CR><LF>.<CR><LF>
* test mail
* .
* 250 2.0.0 Ok: queued as D0251C03F3
* quit
*
* (auth login之后需要输入的经过base64处理的账号和密码,可以通过
* printf 'mymailer' |openssl base64
* printf 'mypass' |openssl base64
* 得到)
* 这里就算是搭建发送成功,如果出现没有收到邮件的意外情况,
* 可以查看/var/log/maillog
* 很有可能被退信了,比如我发往163
*
* to=<xxxxxxxxx@163.com>,
* relay=163mx01.mxmail.netease.com
* [220.181.14.137]:25, delay=21, delays=20/0.01/1.1/0.02,
* dsn=5.0.0, status=bounced
* (host 163mx01.mxmail.netease.com[220.181.14.137]
* said: 550 MI:SPF 163 mx36,
* VsCowAA3ayWf4stXRgB2BQ--.37232S2 1472979616
* http://mail.163.com/help/help_spam_16.htm?
* ip=121.42.148.193&hostid=mx36&time=1472979616 (in reply to
* MAIL FROM command))
*
* 因为域名没有解析,买个域名,解析到服务器就ok了,还不会被送往垃圾箱。
*/ /**
* 3.修改laravel中mail的配置,将主机和账号修改为自己的smtp代理服务器
* 假设你已经买了一个域名,并且已经成功解析:mail.domain.com
*
* 那么,vim ./config/main.php
return [
'driver' => 'smtp',
'host' => 'mail.domain.com',
'port' => 25,
'from' => ['address' => 'mymailer@spaceyun.com', 'name' => 'someone'],
'encryption' => 'ssl',
'username' => 'mymailer',
'password' => 'yourpass',
'sendmail' => '/usr/sbin/sendmail -bs',
];
* 然后测试一下,ok
*/

Linux搭建smtp服务器+laravel5.2发邮件配置的更多相关文章

  1. Linux 搭建SVN 服务器(转)

    一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中 ...

  2. 原 Linux搭建SVN 服务器2

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  3. 原 Linux搭建SVN 服务器

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  4. Linux搭建SVN 服务器

    Linux搭建SVN 服务器 1          安装SVN 2          使用客户端连接 2.1       使用windows的客户端 2.2       使用Linux下的命令行 3  ...

  5. Linux搭建SVN 服务器(转)

    转自:http://my.oschina.net/lionel45/blog/298305 Linux搭建SVN 服务器 作者: 沈小然    日期:2014年 8月 5日 1          安装 ...

  6. Linux 搭建SVN 服务器

    一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中 ...

  7. Linux搭建SVN服务器(服务端)

    Linux搭建SVN服务器(服务端) 1 安装SVN SVN客户端:TortoiseSVN,官网下载:https://tortoisesvn.net/downloads.html(客户端) # yum ...

  8. 使用Linux搭建FTP服务器实现文件共享

    使用Linux搭建FTP服务器实现文件共享... ---------------- Linux中的文件共享:FTPVSFTPDVSFTPD虚拟用户 FTP可以用在Linux与Linux 和Window ...

  9. Linux搭建DHCP服务器

    Linux搭建DHCP服务器   实验目标: 通过本实验掌握基于Linux的DHCP服务器搭建技能. 本实验包含内容为yum的认识与使用,磁盘挂载的概念与使用,DHCP原理及配置,systemctl服 ...

随机推荐

  1. 网络数据包收发流程(二):不配置NAPI的情况

    一.no NAPI 数据结构不配置NAPI的时候,网络设备不使用自己的napi_struct结构,所有网络设备驱动都使用同一个napi_struct,即cpu私有变量__get_cpu_var(sof ...

  2. (基础篇)php中理解print EOT分界符和echo EOT的用法区别

    html与php编写中echo可以同时输出多个字符串,并不需要圆括号. print只可以同时输出一个字符串,需要圆括号. print的用法和C语言很像,所以会对输出内容里的%做特殊解释. echo无返 ...

  3. pyhton 27 pip命令无法使用 没有Scripts文件夹 的解决方法

    1 安装了setuptools http://jingyan.baidu.com/article/fb48e8be52f3166e622e1400.html 2 用ez_setup.py安装了setu ...

  4. Xcode中使用debug模式和release模式

    在开发过程中,我们经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程.但是一个发布的程序,里面带有太多的NSLog输 ...

  5. C# Excel导入

    两张表导入到一个DataGrid里面(题目表和答案表) 前台代码 <asp:Content ID="Content1" ContentPlaceHolderID=" ...

  6. 关于Mac下的SSH客户端iterm2等配置

    linux后台开发的同学们晓得,在windows下有xshell\securecrt这样优秀的ssh客户端软件.mac下查找了下,有securecrt mac版,网上也有破解的,试用了一段时间,一个问 ...

  7. 关于 MAXScript 如何剪切文件夹

    MAXScript 中可以对文件进行创建删除复制等操作但是唯独不能删除文件夹... 网上搜了一下批处理的剪切方法,在 MAXScript 里调用一下就好了 fn xcopy oldfile newfi ...

  8. php 单引号 双引号 ,php字符串/ hmtl / 数据库显示/ 及php的几个转化函数

    * 以单引号为定界符的php字符串,支持两个转义\'和\\* 以双引号为定界符的php字符串,支持下列转义(\'会直接输出\' ,也会转义 \\):    \n 换行(LF 或 ASCII 字符 0x ...

  9. mysql特殊处理

    mysql> create table ef (bc time);Query OK, 0 rows affected (0.03 sec) mysql> insert into ef va ...

  10. Nginx日志导入到Hive0.13.1,同步Hbase0.96.2,设置RowKey为autoincrement(ID自增长)

    ---------------------------------------- 博文作者:迦壹 博客地址:Nginx日志导入到Hive,同步Hbase,设置RowKey为autoincrement( ...