Laravel 发送电子邮件


Laravel使用功能丰富的SwiftMailer库来发送电子邮件,使用该库可以很容易地发送电子邮件而不需要太多麻烦,电子邮件模板的加载方式与视图相同,这意味着你可以使用Blade的语法并将数据注入你的模板中。

下表显示了send()函数的语法和属性:

语法void send(string|array $view, array $data, Closure|string $callback)
参数
  • $view(string|array):包含邮件信息的视图名称

  • $data(array):传递给视图的数据数组

  • $callback: 一个接收消息实例的闭包回调,允许你自定义邮件消息的收件人、主题等方面

返回nothing
描述发送电子邮件。

在第三个参数中,$callback 闭包接收到消息实例,使用该实例,我们还可以调用以下函数并更改消息,如下所示:

  • $message → subject('欢迎来到小牛教程');

  • $message → from('email@example.com', 'Mr. Example');

  • $message → to('email@example.com', 'Mr. Example');

一些不太常见的方法包括:

  • $message → sender('email@example.com', 'Mr. Example');

  • $message → returnPath('email@example.com');

  • $message → cc('email@example.com', 'Mr. Example');

  • $message → bcc('email@example.com', 'Mr. Example');

  • $message → replyTo('email@example.com', 'Mr. Example');

  • $message → priority(2);

要附加或嵌入文件,你可以使用以下方法:

  • $message → attach('path/to/attachment.txt');

  • $message → embed('path/to/attachment.jpg');

邮件可以以 HTML 或文本形式发送。你可以通过传递如下所示的数组来指示要在第一个参数中发送的邮件类型,默认类型是 HTML。如果要发送纯文本邮件,请使用以下语法。

语法

Mail::send([‘text’=>’text.view’], $data, $callback);

在语法中,第一个参数需要一个数组,使用text作为视图的键名。

步骤1: 我们现在将从 Gmail 帐户发送一封电子邮件,为此你需要在 Laravel 环境文件.env中配置你的 Gmail 帐户。在你的 Gmail 帐户中启用两步验证并创建应用程序特定密码,然后更改 .env 参数,如下所示:

MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-application-specific-password
MAIL_ENCRYPTION = tls

步骤2: 改变后 .env 文件后执行以下两个命令来清除缓存并重新启动 Laravel 服务器:

php artisan config:cache

步骤3: 执行以下命令创建一个名为MailController的控制器:

php artisan make:controller MailController --plain

步骤4: 执行成功后,会得到如下输出:

MailController

步骤5: 将以下代码复制到app/Http/Controllers/MailController.php文件中:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class MailController extends Controller {
    public function basic_email() {
        $data = array('name'=>"Virat Gandhi");
   
        Mail::send(['text'=>'mail'], $data, function($message) {
            $message->to('abc@gmail.com', 'Newbie Go')->subject
                ('Laravel Basic Testing Mail');
            $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "Basic Email Sent. Check your inbox.";
    }
    public function html_email() {
        $data = array('name'=>"Virat Gandhi");
        Mail::send('mail', $data, function($message) {
            $message->to('abc@gmail.com', 'Newbie Go')->subject
                ('Laravel HTML Testing Mail');
            $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "HTML Email Sent. Check your inbox.";
    }
    public function attachment_email() {
        $data = array('name'=>"Virat Gandhi");
        Mail::send('mail', $data, function($message) {
            $message->to('abc@gmail.com', 'Newbie Go')->subject
                ('Laravel Testing Mail with Attachment');
            $message->attach('C:\laravel-master\laravel\public\uploads\image.png');
            $message->attach('C:\laravel-master\laravel\public\uploads\test.txt');
            $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "Email Sent with attachment. Check your inbox.";
    }
}

步骤6: 将以下代码复制到resources/views/mail.blade.php文件中:

<h1>Hi, {{ $name }}</h1>
l<p>Sending Mail from Laravel.</p>

步骤7: 修改application/config/routes.php文件,并在文件末尾添加以下配置:

Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');

步骤8: 访问以下网址测试发送邮箱功能:

http://localhost:8000/sendbasicemail

步骤9: 输出如下所示,检查你的收件箱以查看电子邮件:

Basic Email Sent

步骤10: 访问以下 URL 测试 HTML 电子邮件:

http://localhost:8000/sendhtmlemail

步骤11:输出如下所示,检查你的收件箱以查看 html 电子邮件:

HTML Email

步骤12: 访问以下 URL 测试带附件的 HTML 电子邮件:

http://localhost:8000/sendattachmentemail

步骤13: 可以看到如下输出:

Email Sent

注意:在MailController.php文件中,from方法中的电子邮件地址应该是你可以发送邮件的电子邮箱地址,一般来说,它应该是你服务器上配置的电子邮件地址。