在 Laravel 5.6 使用SMTP驱动实现邮件发送

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34804120/article/details/88680015

1. 配置文件

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

<?php

return [

    'driver' => env('MAIL_DRIVER', 'smtp'),     //配置默认的邮件发送驱动


    //host是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com,
    //使用QQ邮箱的话,对应值是smtp.qq.com
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),


    //port用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465
    'port' => env('MAIL_PORT', 587),

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', '[email protected]'), //发送邮箱
        'name' => env('MAIL_FROM_NAME', 'Example'), //发送邮件使用的用户名
    ],


    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    'username' => env('MAIL_USERNAME'),

    'password' => env('MAIL_PASSWORD'),



    'sendmail' => '/usr/sbin/sendmail -bs',
    
    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

我的配置:
env配置

2. 定义路由

为我们的测试在routes.php定义路由规则:

Route::get('mail/send','MailController@send');

3. 创建邮件发送控制器

php artisan make:controller MailController

纯文本邮件发送可以使用Mail::raw方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Mail;


class MailController extends Controller
{
    public function send()
    {
		Mail::raw('这是一封测试邮件', function ($message) {
		    $to = '[email protected]';
		    $message ->to($to)->subject('测试邮件222222');
		});
    }
}

Mail::send需要传递三个参数,第一个是邮件视图,第二个是传入视图的数据,第三个是一个闭包,该闭包中定义了收件人、抄送人(如果有的话)、邮件主题、附件等信息。邮件的主体内容位于局部视图中,下面我们就来定义这个局部视图,在resources/views/emails目录下新建test.blade.php,编辑其内容如下:

{{ $name }} 哈哈哈哈

收到的邮件
使用Mail::send发送视图邮件

    public function send()
    {
        $name = '我叫liang 你好啊';
        $flag = Mail::send('emails.test',['name'=>$name],function($message){
            $to = '[email protected]';
            $message->to($to)->subject('测试邮件22222');
        });

        if( count(Mail::failures()) > 0 ){
        	echo '发送邮件失败,请重试!';
        }else{
             echo '发送邮件成功,请查收!';
        }
    }

收到的视图邮件

使用make:mail生成邮件

php artisan make:mail OrderShipped

该命令会在 app/mail 目录下生成一个继承于Mailable的邮件类。类中的build方法用于构建邮件。

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test');
    }

那么怎么向视图传递数据呢?有两种方法

  1. Mailable 类任何公共属性都可以在视图中使用
  2. 使用 with 方法来传递数据给模板
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderShipped extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test')->subject('Order Shipped')
                    ->with(['other' => '这是通过with方法携带的数据']);
    }
}

发送邮件

使用 Mail 门脸的 to 方法。 to 方法接受一个邮件地址,一个 user 实现或一个 users 集合。如果传递一个对象或集合,mailer 将自动使用 email 和 name 属性来设置邮件收件人,所以确保你的对象里有这些属性。一旦指定收件人,你可以传递一个实现到 Mailable 类的 send 方法

    public function send()
    {
    	$data = '通过公共属性发送的数据';

    	Mail::to('[email protected]')
    			->send(new OrderShipped($data));
    }

最终结果

猜你喜欢

转载自blog.csdn.net/qq_34804120/article/details/88680015