📜  Laravel-发送电子邮件

📅  最后修改于: 2020-10-23 08:06:42             🧑  作者: Mango


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

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

Syntax void send(string|array $view, array $data, Closure|string $callback)
Parameters
  • $view(string|array) − name of the view that contains email message

  • $data(array) − array of data to pass to view

  • $callback − a Closure callback which receives a message instance, allowing you to customize the recipients, subject, and other aspects of the mail message

Returns nothing
Description Sends email.

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

  • $ message→主题(“欢迎使用教程点”);
  • $ 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→优先级(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参数,如下所示。

.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

"Virat Gandhi");
   
      Mail::send(['text'=>'mail'], $data, function($message) {
         $message->to('abc@gmail.com', 'Tutorials Point')->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', 'Tutorials Point')->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', '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('xyz@gmail.com','Virat Gandhi');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}

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

资源/视图/mail.blade.php

Hi, {{ $name }}

l

Sending Mail from Laravel.

步骤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以测试基本电子邮件。

http://localhost:8000/sendbasicemail

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

已发送基本电子邮件

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

http://localhost:8000/sendhtmlemail

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

HTML电子邮件

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

http://localhost:8000/sendattachmentemail

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

邮件已发送

–在MailController.php文件中,from方法中的电子邮件地址应为可从其发送电子邮件地址的电子邮件地址。通常,它应该是服务器上配置的电子邮件地址。