邮件发送

説明:

本人用的是Laravel5.5

我将以 163 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件

163郵箱SMTP服务器地址:smtp.163.com(端口25)

注意:配置config/mail.php和.env配置文件時用的郵箱密碼要使用郵箱客户端授权密码,不用能常规的密码,否則會報錯

1.安裝Guzzle HTTP 函数库,使用 Composer 包管理器安装:

注意:安裝前將composer鏡像切換國内,安裝過程可能會報錯,可能是composer源的問題,多重複安裝幾遍

composer require guzzlehttp/guzzle

2.在 config/mail.php,修改以下配置:

建议在.env文件进行配置,默认的配置文件不要改动

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.163.com'),
'port' => env('MAIL_PORT', 25),
'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'm1376075****@163.com'),
    'name' => env('MAIL_FROM_NAME', 'm1376075****@163.com'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME','m1376075****@163.com'),
'password' => env('MAIL_PASSWORD','****'),//這裏的密碼使用郵箱客户端授权密码,不用能常规的密码,本人在此踩過坑

 3.配置.env文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=你的163邮箱地址
MAIL_PASSWORD=你的163邮箱地址对应的授权密码(不是登录密码
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的163邮箱地址
MAIL_FROM_NAME=发送邮件使用的用户名

  • driver用于配置默认的邮件发送驱动,我们用SMTP(Simple Message Transfer Protocol)简单邮件传输协议
  • host是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com,使用QQ邮箱的话,对应值是smtp.qq.com
  • port用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465
  • username表示邮箱账号
  • password表示上述邮箱对应的授权密码
  • encryption表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls或ssl。
  • from配置项包含address和name,前者表示发送邮箱,后者表示发送邮件使用的用户名。

使用163邮箱做的发送,需登录163邮箱开启POP3和SMTP服务,以及生成授权密码。

邮件发送

邮件发送

3.添加一個測試用路由

Route::group(['prefix' => 'admin'], function () {
    $namespacePrefix="\App\Http\Controllers\Admin\";
    //mail 測試
    Route::get('sendmail',['uses' => $namespacePrefix . 'EmailController@sendMail', 'as' => 'sendMail']);
});

4.controller

<?php

namespace AppHttpControllersAdmin;

use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateSupportFacadesMail;
use AppMailSendEmail;

class EmailController extends Controller
{
    public $email_message = 'this is a test mail';

    public function sendMail()
    {
        Mail::to('fgf163163@163.com')->send(new SendEmail($this->email_message));

        return 'success';
    }


}

5.在AppMail下新建SendEmail.php

<?php

namespace AppMail;

use AppOrder;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;

class SendEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * order 实例。
     *
     * @var Order
     */
    protected $email_message;

    /**
     * 创建一个新消息实例。
     *
     * @return void
     */
    public function __construct($email_message)
    {
        $this->email_message = $email_message;
    }

    /**
     * 构建消息。
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test')
            ->with([
                'email_message' => $this->email_message,
            ]);
    }
}

6.在resources/views/emails下新建test.blade.php模板文件

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
    <div>
        {{$email_message}}
    </div>
</body>
</html>

7.訪問路由

http://127.0.0.1:8000/admin/sendmail

邮件发送

 查看郵箱,是否收到郵件

文檔地址:https://learnku.com/docs/laravel/5.5/mail/1321

如果单纯发送纯文本邮件可以参考:https://blog.****.net/qq175023117/article/details/85317291