• Linux搭建smtp服务器+laravel5.2发邮件配置



    /**
     * 这里主要是想通过自己搭建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 IlluminateSupportFacadesMail;
    //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内存:内存管理的实质
    阿里巴巴笔试题
    LINUX内核经典面试题(转)
    常见网络编程面试题答案征集与面试题(收集)
    转使用jQuery Ajax的内存回收
    模式识别与机器学习
    vc2010 学习笔记2
    vc2010 学习笔记3
    Android高级编程(笔记)第6章 数据存储、检索和共享—3SQLite数据库
    Android高级编程(笔记)第6章 数据存储、检索和共享1共享Preference
  • 原文地址:https://www.cnblogs.com/eis13/p/5839819.html
Copyright © 2020-2023  润新知