Laravel发送邮件

Laravel发送邮件

Laravel使用功能丰富免费的“SwiftMailer”程序库来发送电子邮件。 使用这个库函数,我们可以轻松地发送电子邮件。电子邮件模板以视图同样的方式加载,这意味着可以使用 Blade 语法并数据注入到你的模板。以下是发送函数的语法。
语法 void send(string|array $view, array $data, Closure|string $callback)
参数
  • $view(string|array) – 包含电子邮件的视图的名称

  • $data(array) – 数组数据用来传递到视图

  • $callback – 接收邮件的实例,可自定义收件人,主题和邮件等方面的闭合回调

返回值 nothing
描述 发送邮件
在第三个参数, $callback封闭收到消息实例以及与实例,我们还可以调用下面函数并更改信息,如下图所示。
  • $message->subject('Welcome to the zyiz zyiz');
  • $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”为键,这个键对应的值是“name of the view”。 

示例

第1步 - 现在要从Gmail帐户发送电子邮件,那么这里需要配置Laravel环境文件中的Gmail帐户 — .env 文件。Gmail帐户启用两步验证,创建一个应用程序并指定密码,如下图所示修改 .env 中的参数。

.env

MAIL_DRIVER = smtp
MAIL_HOST = smtp.qq.com
MAIL_PORT = 587
MAIL_USERNAME = QQ邮箱地址,如:2211@qq.com
MAIL_PASSWORD = QQ密码
MAIL_ENCRYPTION = tls
第2步 - 修改 .env 文件执行下面的两个命令来清除缓存,并重新启动Laravel服务器之后。
php artisan config:cache
第3步 - 通过执行以下命令来创建一个名为 MailController 的控制器。
php artisan make:controller MailController
第4步 - 成功执行后,您会收到以下输出 -

第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'=>"zyiz-User"); Mail::send(['text'=>'mail'], $data, function($message) {
         $message->to('zyiz.net@gmail.com', 'zyiz zyiz')->subject
            ('Laravel Basic Testing Mail');
         $message->from('xxxxxx@qq.com','zyiz Author');
      });
      echo "Basic Email Sent. Check your inbox.";
   }

   public function html_email(){
      $data = array('name'=>"zyiz-User"); Mail::send('mail', $data, function($message) {
         $message->to('zyiz_com@qq.com', 'zyiz zyiz')->subject
            ('Laravel HTML Testing Mail');
         $message->from('xxxxx@qq.com','zyiz Author');
      });
      echo "HTML Email Sent. Check your inbox.";
   }
   
   public function attachment_email(){
      $data = array('name'=>"zyiz-User"); Mail::send('mail', $data, function($message) {
         $message->to('zyiz.net@gmail.com', 'zyiz zyiz')->subject
            ('Laravel Testing Mail with Attachment');
         $message->attach('D:\laravel\public\uploads\image.png');
         $message->attach('D:\laravel\public\uploads\test.txt');
         $message->from('xxxx@qq.com','zyiz Author');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}
第6步 - 将以下代码复制到resources/views/mail.blade.php 文件。

resources/views/mail.blade.php

<h1>Hi, {{ $name }}</h1>
<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步 - 访问以下网址测试基本电子邮件。

http://localhost:8000/sendbasicemail

第9步 - 输出的画面将是这个样子。请检查您的收件箱是否看到基本的电子邮件输出。

第10步 - 访问以下网址来测试HTML电子邮件。

http://localhost:8000/sendhtmlemail

第11步 - 输出的画面将是这个样子。请检查您的收件箱是否看到HTML的电子邮件输出。


第12步 - 请访问以下网址使用附件测试HTML电子邮件。

http://localhost:8000/sendattachmentemail

第13步 - 输出画面将是这个样子。请检查您的收件箱看到有附件的HTML电子邮件输出。

打开邮件后:

注 - 在MailController.php文件中的表单方法的电子邮件地址是用来发送电子邮件的电子邮件地址。一般来说,它应是服务器上配置的电子邮件地址。