Laravel - 发送邮件



Laravel 使用功能丰富的免费库SwiftMailer发送电子邮件。使用库函数,我们可以轻松地发送电子邮件,无需太多麻烦。电子邮件模板的加载方式与视图相同,这意味着您可以使用 Blade 语法并将数据注入到您的模板中。

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

语法 void send(string|array $view, array $data, Closure|string $callback)
参数
  • $view(string|array) - 包含电子邮件正文的视图名称

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

  • $callback - 一个 Closure 回调函数,它接收一个邮件实例,允许您自定义收件人、主题以及邮件的其他方面

返回值
描述 发送邮件。

在第三个参数中,$callback closure 收到邮件实例,并通过该实例,我们还可以调用以下函数并更改邮件,如下所示。

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

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

  • $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 参数,如下所示。

.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 文件。

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('[email protected]', 'Tutorials Point')->subject
            ('Laravel Basic Testing Mail');
         $message->from('[email protected]','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('[email protected]', 'Tutorials Point')->subject
            ('Laravel HTML Testing Mail');
         $message->from('[email protected]','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('[email protected]', 'Tutorials Point')->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('[email protected]','Virat Gandhi');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}

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

resources/views/mail.blade.php

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

步骤 7 - 在app/Http/routes.php中添加以下几行。

app/Http/routes.php

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

步骤 8 - 访问以下 URL 以测试基本电子邮件。

https://127.0.0.1:8000/sendbasicemail

步骤 9 - 输出屏幕将如下所示。检查您的收件箱以查看基本电子邮件输出。

Basic Email Sent

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

https://127.0.0.1:8000/sendhtmlemail

步骤 11 - 输出屏幕将如下所示。检查您的收件箱以查看 HTML 电子邮件输出。

HTML Email

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

https://127.0.0.1:8000/sendattachmentemail

步骤 13 - 您将看到以下输出

Email Sent

注意 - 在MailController.php文件中,from方法中的电子邮件地址应该是您可以发送电子邮件的电子邮件地址。通常,它应该是您服务器上配置的电子邮件地址。

广告