이메일 전송


ㅋㅋ   

Mail

Introduction

Laravel은 SwiftMailer 라이브러리를 기반으로 깔끔하고 상쾌한 이메일 API를 제공합니다. Laravel은 SMTP, Mailgun, SparkPost, Amazon SES, PHP의 mail 기능 및 sendmail용 드라이버를 제공하므로 로컬 또는 클라우드 서비스를 통해 이메일을 빠르게 보낼 수 있습니다. mail 函数,以及 sendmail 提供了驱动,从而允许你快速通过本地或云服务发送邮件。

邮件驱动预备知识

基于 API 的驱动如 Mailgun 和 SparkPost 通常比 SMTP 服务器更简单、更快,所以如果可以的话,尽可能使用这些服务。所有的 API 驱动要求应用已经安装 Guzzle HTTP 库,你可以通过 Composer 包管理器来安装它:

composer require guzzlehttp/guzzle

Mailgun 驱动

要使用 Mailgun 驱动(Mailgun 前 10000 封邮件免费,后续收费),首先安装 Guzzle,然后在配置文件 config/mail.php 中设置 driver 选项为 mailgun 。接下来,验证配置文件 config/services.php 包含如下选项:

'mailgun' => [
    'domain' => 'your-mailgun-domain',    
    'secret' => 'your-mailgun-key',
  ],

如果您没有使用 “US” Mailgun 地区     ,您可以在 services

🎜

메일 드라이버 전제 조건

🎜Mailgun 및 SparkPost와 같은 API 기반 드라이버 일반적으로 SMTP 서버보다 간단하고 빠르므로 가능하면 이러한 서비스를 사용하십시오. 모든 API 드라이버에는 애플리케이션에 Guzzle HTTP 라이브러리가 설치되어 있어야 합니다. Composer 패키지 관리자를 통해 설치할 수 있습니다: 🎜
'mailgun' => [
    'domain' => 'your-mailgun-domain',    
    'secret' => 'your-mailgun-key',    
    'endpoint' => 'api.eu.mailgun.net',
  ],
🎜

Mailgun 드라이버

🎜Mailgun 드라이버를 사용하려면(Mailgun은 처음 10,000개의 이메일까지 무료이며 이후 요금이 부과됩니다) 먼저 Guzzle을 설치한 다음 config/mail 구성 파일에서 driver 옵션을 설정하세요. .php를 < code>mailgun으로 변경하세요. 다음으로 구성 파일 config/services.php에 다음 옵션이 포함되어 있는지 확인하세요. 🎜
composer require wildbit/swiftmailer-postmark
🎜"US"를 사용하지 않는 경우
Mailgun 지역 🎜, services에서 해당 지역의 터미널 프로필을 정의할 수 있습니다: 🎜
'postmark' => [ 
   'token' => 'your-postmark-token',
  ],
🎜🎜

Postmark Driver

Postmark 드라이버를 사용하려면 Composer를 통해 Postmark의 SwiftMailer를 설치하세요.

'sparkpost' => [
    'secret' => 'your-sparkpost-key',
   ],

다음으로 Guzzle을 설치하고 config/mail.php 구성 파일에 드라이버를 추가하세요 옵션이 소인으로 설정되어 있습니다. 마지막으로 config/services.php 구성 파일에 다음 옵션이 포함되어 있는지 확인하세요. config / mail.php 配置文件中的 driver 选项设置为  postmark。 最后,验证您的 config / services.php 配置文件包含以下选项:

'sparkpost' => [
    'secret' => 'your-sparkpost-key',    
    'options' => [     
       'endpoint' => 'https://api.eu.sparkpost.com/api/v1/transmissions',   
     ],
  ],

SparkPost 驱动

要使用 SparkPost 驱动,首先安装 Guzzle,然后再配置文件 config/mail.php 中设置 driver 选项值为 sparkpost 。接下来,验证配置文件 config/services.php 包含如下选项:

"aws/aws-sdk-php": "~3.0"

如果有必要的话,你还可以设置 API 端点使用:

'ses' => [
    'key' => 'your-ses-key',    
    'secret' => 'your-ses-secret',    
    'region' => 'ses-region', 
     // e.g. us-east-1
  ],

SES 驱动

要使用 Amazon SES 驱动(收费),先安装 Amazon AWS 的 PHP SDK,你可以通过添加如下行到 composer.json 文件的 require 部分然后运行 composer update 命令来安装该库:

'ses' => [
    'key' => 'your-ses-key',    
    'secret' => 'your-ses-secret',    
    'region' => 'ses-region',  
    // e.g. us-east-1    
    'options' => [    
        'ConfigurationSetName' => 'MyConfigurationSet',        
        'Tags' => [    
                [      
                     'Name' => 'foo',                
                     'Value' => 'bar',         
                  ],    
                ],   
             ],
        ],

接下来,设置配置文件 config/mail.php 中的 driver 选项为 ses 。然后,验证配置文件  config/services.php 包含如下选项:

php artisan make:mail OrderShipped

如果您在执行 SES 时需要包含 附加选项 SendRawEmail 请求,您可以在 ses 配置中定义 options 数组:

/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->from('example@example.com')              
       ->view('emails.orders.shipped');
    }

生成可邮寄类

在 Laravel 中,应用发送的每一封邮件都可以表示为 “可邮寄” 类,这些类都存放在 app/Mail 目录。如果没看到这个目录,别担心,它将会在你使用 make:mail 命令创建第一个可邮寄类时生成:

'from' => ['address' => 'example@example.com', 'name' => 'App Name'],

编写可邮寄类

所有的可邮寄类配置都在 build 方法中完成,在这个方法中,你可以调用多个方法,例如 fromsubjectview, 和 attach 来配置邮件的内容和发送。

配置发件人

使用 from 方法

我们来看一下邮件发件人的配置,或者,换句话说,邮件来自于谁。有两种方式来配置发送者,第一种方式是在可邮寄类的 build 方法方法中调用 from

'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],

SparkPost 드라이버
🎜 SparkPost 드라이버를 사용하려면 먼저 Guzzle을 설치한 후 config/mail.php 구성 파일에서 driver 옵션 값을 sparkpost로 설정하세요. 다음으로, 구성 파일 config/services.php에 다음 옵션이 포함되어 있는지 확인하세요. 🎜
/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->view('emails.orders.shipped');
   }
🎜필요한 경우 API 엔드포인트사용: 🎜
/**
 * 构建消息.
 *
 * @return $this
 */
 public function build(){
     return $this->view('emails.orders.shipped')             
        ->text('emails.orders.shipped_plain');
    }
🎜🎜SES 드라이버🎜🎜Amazon SES 드라이버(유료)를 사용하려면 먼저 설치하세요. Amazon AWS PHP SDK의 경우 composer.json 파일의 require 섹션에 다음 줄을 추가한 후 composer update를 실행하여 라이브러리를 설치할 수 있습니다. code> 명령: 🎜
<?php
    namespace App\Mail;
    use App\Order;use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    class OrderShipped extends Mailable{ 
       use Queueable, SerializesModels;   
     /**
     * 订单实例.
     *
     * @var Order
     */  
   public $order; 
    /**
     * 创建一个新的消息实例.
     *
     * @return void
     */   
   public function __construct(Order $order)   
   {     
      $this->order = $order;   
   }   
   /**
     * 构建消息.
     *
     * @return $this
     */   
    public function build()  
      {      
        return $this->view('emails.orders.shipped');  
         }
    }
🎜다음으로, 구성 파일 config/mail.phpdriver 옵션을 ses로 설정하세요. 그런 다음 구성 파일 config/services.php에 다음 옵션이 포함되어 있는지 확인하십시오. 🎜
<div>
    Price: {{ $order->price }}
</div>
🎜 추가 옵션 SendRawEmail 요청 실행 시 ses 구성에서 options 배열을 정의합니다: 🎜
<?php
    namespace App\Mail;
    use App\Order;
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    class OrderShipped extends Mailable{ 
       use Queueable, SerializesModels;   
     /**
     * 订单实例.
     *
     * @var Order
     */ 
   protected $order;  
    /**
     * 创建一个新的实例.
     *
     * @return void
     */  
   public function __construct(Order $order)  
     {     
        $this->order = $order;  
      }   
    /**
     * 构建消息.
     *
     * @return $this
     */  
    public function build()  
      {     
         return $this->view('emails.orders.shipped')                
             ->with([                 
                    'orderName' => $this->order->name,                        
                    'orderPrice' => $this->order->price,                 
                    ]);  
           }
      }
🎜🎜
🎜

메일 가능한 클래스 생성

🎜Laravel에서는 애플리케이션에서 보낸 모든 이메일이 "mailable" 클래스로 표시될 수 있으며 이러한 클래스는 app/Mail에 저장됩니다. 코드> 디렉토리. 이 디렉토리가 보이지 않더라도 걱정하지 마십시오. make:mail 명령을 사용하여 첫 번째 메일링 가능 클래스를 생성할 때 생성됩니다: 🎜
<div>
    Price: {{ $orderPrice }}
</div>
🎜 🎜
🎜

메일 가능한 클래스 작성

🎜모든 메일 가능한 클래스 구성은 build 메소드에 있습니다. 이 메소드를 완료하면 from, subject, viewattach 코드와 같은 여러 메소드를 호출할 수 있습니다. > 이메일의 내용과 전송을 구성합니다. 🎜🎜🎜
🎜

발신자 구성

🎜🎜from 메서드 사용🎜🎜이메일 발신자, 즉 이메일을 보낸 사람의 구성을 살펴보겠습니다. 발신자를 구성하는 방법에는 두 가지가 있습니다. 첫 번째 방법은 메일 가능 클래스의 build 메소드에서 from 메소드를 호출하는 것입니다. 🎜
    /**
     * Build the message.
     *
     * @return $this
     */    
     public function build()   
      {      
        return $this->view('emails.orders.shipped')                 
           ->attach('/path/to/file');  
      }
🎜🎜

전역 from 주소 사용 from 地址

不过,如果你的应用在所有邮件中都使用相同的发送地址,在每个生成的可邮寄类中都调用  from 方法就显得很累赘。取而代之地,你可以在配置文件 config/mail.php 中指定一个全局的发送地址, 如果在 mailable 类中未指定其他 from 地址,则将使用此地址:

    /**
     * Build the message.
     *
     * @return $this
     */  
   public function build()  
    {      
      return $this->view('emails.orders.shipped')                
          ->attach('/path/to/file', [                        
                                          'as' => 'name.pdf',                       
                                           'mime' => 'application/pdf',       
                                     ]);  
     }

此外,您可以在 config / mail.php 配置文件中定义全局 reply_to 地址:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
    return $this->view('email.orders.shipped')             
      ->attachFromStorage('/path/to/file');
 }

配置视图

你可以在可邮寄类的 build 方法中使用 view 方法来指定渲染邮件内容时使用哪个视图模板,由于每封邮件通常使用 Blade 模板来渲染内容,所以你可以在构建邮件 HTML 时使用 Blade 模板引擎提供的所有功能:

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){ 
   return $this->view('email.orders.shipped')            
      ->attachFromStorage('/path/to/file', 'name.pdf', [               
          'mime' => 'application/pdf'             
       ]);
    }

{注:} 你可以创建一个 resources/views/emails 目录来存放所有邮件模板,当然,你也可以将邮件模板放到 resources/views 目录下任意其它位置。

纯文本邮件

如果你想要定义一个纯文本格式的邮件,可以使用 text 方法。和 view 方法一样, text

그러나 애플리케이션이 모든 이메일에 동일한 전송 주소를 사용하는 경우 생성된 모든 메일 가능 클래스에서 from를 호출하세요. > 방법이 번거로워 보입니다. 대신, 구성 파일 config/mail.php에 전역 전송 주소를 지정할 수 있습니다. 이는 메일 가능 클래스에 다른 from 주소가 지정되지 않은 경우에 사용됩니다. :

/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
    return $this->view('email.orders.shipped')            
       ->attachFromStorageDisk('s3', '/path/to/file');
   }
또한 config/mail.php 구성 파일 주소:
    /**
     * Build the message.
     *
     * @return $this
     */
   public function build()  
     {     
        return $this->view('emails.orders.shipped')                
            ->attachData($this->pdf, 'name.pdf', [                   
                 'mime' => 'application/pdf',                
                ]);  
         }

reply_to를 정의할 수 있습니다. ">

Configuration view
mailable 클래스의 build 메소드에서 view 이메일 콘텐츠를 렌더링할 때 사용할 보기 템플릿을 지정하는 방법입니다. 각 이메일은 일반적으로 블레이드 템플릿을 사용하여 콘텐츠를 렌더링하므로 이메일 HTML을 작성할 때 블레이드 템플릿 엔진에서 제공하는 모든 기능을 사용할 수 있습니다.

<body>
    Here is an image:
    <img src="{{ $message->embed($pathToImage) }}">
</body>

{참고:} resources/views/emails 디렉토리를 생성하여 모든 이메일 템플릿을 저장할 수도 있습니다. 물론 resources/ 아래의 다른 위치에 이메일 템플릿을 배치할 수도 있습니다. 보기 디렉토리.

일반 텍스트 이메일

일반 텍스트 형식으로 이메일을 정의하려면 text 방법 . view 메소드와 마찬가지로 text 메소드는 이메일 콘텐츠를 렌더링하는 데 사용되는 템플릿 이름을 받습니다. 일반 텍스트 메시지 또는 HTML 메시지를 정의할 수 있습니다:
<body>
    Here is an image from raw data:
        <img src="{{ $message->embedData($data, $name) }}">
</body>
🎜🎜 🎜 🎜🎜🎜🎜공용 속성을 통해 데이터 보기 🎜🎜🎜🎜 🎜🎜 일반적으로 사용할 이메일을 렌더링하는 HTML 보기에 일부 데이터를 전달해야 합니다. 데이터를 뷰에 전달하는 방법에는 두 가지가 있습니다. 첫째, 메일 가능 클래스에 정의된 모든 공개 속성이 자동으로 뷰에 전달됩니다. 따라서 메일 가능 클래스의 생성자에 데이터를 전달하고 해당 데이터를 클래스의 공용 속성으로 설정할 수 있습니다. 🎜
/**
 * 构建消息。
 *
 * @return $this
 */
 public function build(){
     $this->view('emails.orders.shipped');    
     $this->withSwiftMessage(function ($message) {    
         $message->getHeaders()             
            ->addTextHeader('Custom-Header', 'HeaderValue');   
     });
}
🎜데이터가 공용 속성으로 설정된 후에는 뷰에 자동으로 적용되므로 다음을 수행할 수 있습니다. 블레이드와 마찬가지로 템플릿의 다른 데이터와 동일한 방식으로 액세스합니다. 🎜
php artisan make:mail OrderShipped --markdown=emails.orders.shipped
🎜🎜

with 방법을 통해

이메일 데이터를 템플릿으로 보내기 전에 형식을 맞춤설정하려면 데이터를 수동으로 전달하여 볼 수 있습니다. 일반적으로 메일 가능 클래스의 생성자를 통해 데이터를 전달해야 하지만 이번에는 데이터를 protected 또는 private 속성으로 설정해야 합니다. 이는 뷰에 자동으로 적용되지 않습니다. 그런 다음 with 메서드가 호출되면 데이터가 뷰 템플릿에 적용되도록 배열 데이터를 메서드에 전달합니다. with 方法

如果你想要在数据发送到模板之前自定义邮件数据的格式,可以通过  with 方法手动传递数据到视图。一般情况下,你还是需要通过可邮寄类的构造器传递数据,不过,这次你需要设置数据为  protectedprivate 属性,这样,这些数据就不会在视图中自动生效。然后,当调用 with 方法时,传递数组数据到该方法以便数据在视图模板中生效:

/**
 * Build the message.
 *
 * @return $this
 */
 public function build(){ 
    return $this->from('example@example.com')            
        ->markdown('emails.orders.shipped');
   }

数据通过 with 方法传递到视图后,将会在视图中自动生效,因此你也可以像在 Blade 模板访问其它数据一样访问传递过来的数据:

@component('mail::message')
# 订单已发货
Your order has been shipped!
@component('mail::button', ['url' => $url])
View Order
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent

附件

要在邮件中加入附件,在 build 方法中使用 attach 方法。attach 方法接受文件的绝对路径作为它的第一个参数:

@component('mail::button', ['url' => $url, 'color' => 'success'])
View Order
@endcomponent

附加文件到消息时,你也可以传递 数组attach 方法作为第二个参数,以指定显示名称和 / 或是 MIME 类型:

@component('mail::panel')
This is the panel content.
@endcomponent

从磁盘中添加附件

如果您已在文件存储上存储了一个文件,则可以使用 attachFromStorage 方法将其附加到电子邮件中:

@component('mail::table')
| Laravel       | Table         | Example  |
| ------------- |:-------------:| --------:|
| Col 2 is      | Centered      |       |
| Col 3 is      | Right-Aligned |       |
@endcomponent

如有必要,您可以使用 attachFromStorage 方法的第二个和第三个参数指定文件的附件名称和其他选项:

php artisan vendor:publish --tag=laravel-mail

如果需要指定默认磁盘以外的存储磁盘,可以使用 attachFromStorageDisk 方法:

<?php
    namespace App\Http\Controllers;
    use App\Order;use App\Mail\OrderShipped;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Mail;
    use App\Http\Controllers\Controller;
    class OrderController extends Controller{   
     /**
     * 发送给定的订单。
     *
     * @param  Request  $request
     * @param  int  $orderId
     * @return Response
     */  
       public function ship(Request $request, $orderId)  
         {      
           $order = Order::findOrFail($orderId);        
           // 发送订单...        
           Mail::to($request->user())->send(new OrderShipped($order));  
           }
     }

原始数据附件

attachData 可以使用字节数据作为附件。例如,你可以使用这个方法将内存中生成而没有保存到磁盘中的 PDF 附加到邮件中。attachData 方法第一个参数接收原始字节数据,第二个参数为文件名,第三个参数接受一个数组以指定其他参数:

Mail::to($request->user()) 
   ->cc($moreUsers)    
   ->bcc($evenMoreUsers)    
   ->send(new OrderShipped($order));

内联附件

在邮件中嵌入内联图片通常都很麻烦;不过,Laravel 提供了向邮件中附加图片并获取适当的 CID 的简便方法。可以使用邮件模板中 $message 变量的 embed 方法来嵌入内联图片。Laravel 自动使 $message 变量在全部邮件模板中可用,不需要担心如何手动传递它:

$invoice = App\Invoice::find(1);
return (new App\Mail\InvoicePaid($invoice))->render();

{note} $message

Route::get('mailable', function () {
    $invoice = App\Invoice::find(1);    
    return new App\Mail\InvoicePaid($invoice);
  });

데이터가 <를 통해 뷰에 전달된 후 code>with 메소드는 뷰에 자동으로 적용되므로 블레이드 템플릿의 다른 데이터에 액세스하는 것처럼 전달된 데이터에 액세스할 수도 있습니다:

Mail::to($request->user())  
  ->cc($moreUsers)    
  ->bcc($evenMoreUsers)    
  ->queue(new OrderShipped($order));

$when = now()->addMinutes(10);Mail::to($request->user())  
              ->cc($moreUsers)    
              ->bcc($evenMoreUsers)    
              ->later($when, new OrderShipped($order));

파일을 메시지에 첨부할 때 배열을 < code>attach 메소드를 두 번째 매개변수로 사용하여 표시 이름 및/또는 MIME 유형을 지정합니다: 🎜

$message = (new OrderShipped($order))        
        ->onConnection('sqs')                
        ->onQueue('emails');Mail::to($request->user())    
        ->cc($moreUsers)    
        ->bcc($evenMoreUsers)    
        ->queue($message);
🎜🎜디스크에서 첨부 파일 추가

File Storage에 이미 파일이 저장되어 있는 경우 attachFromStorage 메서드를 사용하여 이메일에 첨부할 수 있습니다. 🎜

use Illuminate\Contracts\Queue\ShouldQueue;
class OrderShipped extends Mailable implements ShouldQueue{ 
   //
 }

필요한 경우 를 사용할 수 있습니다. AttachFromStorage 메소드의 세 번째 매개변수는 첨부 파일 이름과 기타 옵션을 지정합니다: 🎜

Mail::to($request->user())->locale('es')->send( 
   new OrderShipped($order)
  );

기본 디스크가 아닌 다른 저장 디스크를 지정해야 하는 경우 attachFromStorageDisk를 사용할 수 있습니다. 메소드 : 🎜

use Illuminate\Contracts\Translation\HasLocalePreference;
class User extends Model implements HasLocalePreference{    
     /**
     * 获取用户首选区域设置。
     *
     * @return string
     */   
  public function preferredLocale() 
     {     
        return $this->locale;  
       }
    }
🎜🎜Raw 데이터 첨부

attachData 바이트 데이터를 첨부로 사용할 수 있습니다. 예를 들어, 이 방법을 사용하면 메모리에 생성되었지만 디스크에 저장되지 않은 전자 메일에 PDF를 첨부할 수 있습니다. attachData 메소드의 첫 번째 매개변수는 원시 바이트 데이터를 수신하고, 두 번째 매개변수는 파일 이름이며, 세 번째 매개변수는 다른 매개변수를 지정하기 위한 배열을 허용합니다: 🎜

Mail::to($request->user())->send(new OrderShipped($order));

🎜

🎜

인라인 첨부 파일

이메일에 인라인 이미지를 삽입하는 것은 종종 번거로운 작업입니다. 그러나 Laravel은 다음을 제공합니다. 이메일에 이미지를 첨부하고 적절한 CID를 얻는 쉬운 방법입니다. 인라인 이미지는 이메일 템플릿에 있는 $message 변수의 embed 메소드를 사용하여 삽입할 수 있습니다. Laravel은 모든 이메일 템플릿에서 $message 변수를 자동으로 사용 가능하게 만들기 때문에 수동으로 전달하는 것에 대해 걱정할 필요가 없습니다: 🎜

'to' => [ 
   'address' => 'example@example.com',    
   'name' => 'Example'
  ],

{note} $message in 텍스트 문자 메시지는 인라인 첨부 파일을 사용할 수 없으므로 메시지에서는 사용할 수 없습니다. 🎜🎜🎜🎜

원본 데이터 첨부 파일 삽입

이메일 템플릿에 포함하려는 원본 데이터 문자열이 이미 있는 경우 $message 변수의 embedData 메서드를 사용할 수 있습니다. : $message 变量的 embedData 方法:

/**
 * 为应用映射事件侦听器。
 *
 * @var array
 */
 protected $listen = [  
   'Illuminate\Mail\Events\MessageSending' => [     
      'App\Listeners\LogSendingMessage',   
   ],    
   'Illuminate\Mail\Events\MessageSent' => [     
      'App\Listeners\LogSentMessage', 
        ],
   ];

自定义 SwiftMailer 消息

Mailable 基类的 withSwiftMessage 方法允许你注册一个回调,它将在发送消息之前被调用,原始的 SwiftMailer 消息将作为该回调的参数:

rrreee

Markdown 格式的 Mailables 类

Markdown 格式 mailable 消息允许你从预构建模板和 mailable 类中的邮件通知组件获益。由于消息使用 Markdown 书写,Laravel 能够渲染出美观的、响应式的 HTML 模板消息,还能自动生成文本副本。

生成 Markdown 格式的 Mailables 类

要生成一个适用 Markdown 模板的 mailable,可以使用带有 --markdown 选项的 make:mail Artisan 命令:

rrreee

然后,在它的 build 方法中配置 mailable,调用 markdown 方法代替 view 方法。 markdown 方法接受 Markdown 模板名和一个可选的在模板中可用的数组:

rrreee

编写 Markdown 消息

Markdown mailable 使用 Blade 组件和 Markdown 语法组合,让你可以更方便地利用 Laravel 预制组件构建邮件消息:

rrreee

{tip} 编写 Markdown 邮件时不要使用额外的缩进。Markdown 解析器将把缩进内容渲染成代码块。

按钮组件

按钮组件渲染一个居中按钮链接。此组建接受两个参数, url 和可选的 color。颜色选项支持 primarysuccesserrorrrreee

SwiftMailer 메시지 사용자 정의

Mailable 기본 클래스 withSwiftMessage 메소드를 사용하면 원래 SwiftMailer 메시지를 해당 콜백에 대한 인수로 사용하여 메시지를 보내기 전에 호출될 콜백을 등록할 수 있습니다:

rrreee

Markdown 형식의 Mailables 클래스

Markdown 형식의 메일 가능 메시지를 사용하면 사전에 mailable 클래스에 템플릿과 이메일 알림 구성요소를 구축했습니다. 메시지는 Markdown으로 작성되기 때문에 Laravel은 아름답고 반응이 빠른 HTML 템플릿 메시지를 렌더링하고 자동으로 텍스트 복사본을 생성할 수 있습니다.

Markdown 형식으로 Mailables 클래스 생성

적합한 클래스를 생성하려면 메일로 보낼 수 있는 마크다운 템플릿, --markdown 옵션과 함께 make:mail Artisan 명령을 사용할 수 있습니다:
rrreee
그런 다음 build 구성에서 메소드에 메일을 보낼 수 있고 view 메소드 대신 markdown 메소드를 호출하세요. markdown 메서드는 Markdown 템플릿 이름과 템플릿에서 사용 가능한 이름의 선택적 배열을 허용합니다: 🎜rrreee🎜🎜🎜
🎜

마크다운 메시지 작성

🎜Markdown 메일러블은 블레이드 구성 요소와 마크다운 구문의 조합을 사용하므로 Laravel의 사전 제작된 구성 요소를 보다 쉽게 ​​사용하여 이메일 메시지를 작성할 수 있습니다. 🎜rrreee
🎜{tip } 마크다운 이메일을 작성할 때 추가 들여쓰기를 사용하지 마세요. Markdown 파서는 들여쓰기된 콘텐츠를 코드 블록으로 렌더링합니다. 🎜
🎜🎜Button 구성 요소🎜🎜Button 구성 요소는 중앙에 위치한 버튼 링크를 렌더링합니다. 이 구성 요소는 url과 선택적으로 color라는 두 가지 매개 변수를 허용합니다. 색상 옵션은 기본, 성공오류를 지원합니다. 메시지에 원하는 만큼 버튼 구성 요소를 추가할 수 있습니다. 🎜rrreee🎜🎜🎜Panel Component🎜🎜Panel 구성 요소는 메시지의 나머지 부분과 약간 다른 배경색으로 패널 내부의 특정 텍스트 블록을 렌더링합니다. 경고 텍스트 블록을 그릴 수 있습니다: 🎜rrreee🎜🎜🎜Table 구성 요소🎜🎜Table 구성 요소를 사용하면 Markdown 테이블을 HTML 테이블로 변환할 수 있습니다. 이 구성 요소는 Markdown 테이블을 콘텐츠로 허용합니다. 열 정렬은 기본 Markdown 테이블 정렬 구문을 지원합니다: 🎜rrreee🎜🎜🎜🎜🎜🎜

사용자 정의 구성 요소

모든 Markdown 이메일 구성 요소를 자신의 애플리케이션으로 내보내고 이를 사용자 정의 구성 요소의 템플릿으로 사용할 수 있습니다. 이러한 구성 요소를 내보내려면 laravel-mail 자산 태그와 함께 vendor:publish Artisan 명령을 사용하세요. laravel-mail 资产标签的 vendor:publish Artisan 命令:

rrreee

此命令将 Markdown 邮件组件导出到 resources/views/vendor/mail 目录。 mail 目录包含 htmltext 子目录, 分别包含各自对应的可用组件描述。可以按照自己的意愿自定义这些组件。

自定义 CSS

组建导出以后,resources/views/vendor/mail/html/themes 目录有一个 default.css 文件。可以自此文件中自定义 CSS,这些样式将自动内联到 Markdown 邮件消息的 HTML 表示中。

{tip} 如果想为 Markdown 组件创建完整的新主题,可以在 html/themes 目录新建一个 CSS 文件,并修改 mail 配置文件的  theme 选项。

发送邮件

若要发送邮件,使用 Mail facade 的 to 方法。 to 方法接受 邮件地址、用户实例或用户集合。如果传递一个对象或者对象集合,mailer 在设置收件人时将自动使用它们的 emailname 属性,因此请确保对象的这些属性可用。一旦制定了收件人,就可以将 mailable 类实例传递给 send 方法:

rrreee

在发送消息时不止可以指定收件人。还可以通过链式调用「to」、「cc」、「bcc」一次性指定抄送和密送收件人:

rrreee

渲染 Mailable

有时可能希望捕获 mailable 的 HTML 内容,而不发送它。可以调用 mailable 的 renderrrreee

이 명령은 Markdown 메일 구성 요소를 resources /로 내보냅니다. views/vendor/mail 디렉토리. mail 디렉토리에는 사용 가능한 구성 요소에 대한 각각의 설명이 포함된 htmltext 하위 디렉토리가 포함되어 있습니다. 이러한 구성요소는 원하는 대로 사용자 정의할 수 있습니다.

사용자 정의 CSS

내보낸 후 resources/views/vendor/mail/html/themes 디렉토리 default.css 파일이 있습니다. CSS는 이 파일에서 사용자 정의할 수 있으며 이러한 스타일은 Markdown 이메일 메시지의 HTML 표현에 자동으로 인라인됩니다.

{tip} Markdown 구성 요소에 대한 완전히 새로운 테마를 생성하려면 html/themes 디렉토리에 새 CSS 파일을 생성하고 mail<을 수정하면 됩니다. /code> 구성 파일 theme 옵션입니다.

메일 보내기

메일을 보내려면 다음을 사용하세요. Mail 파사드의 to 메소드. to 메소드는 이메일 주소, 사용자 인스턴스 또는 사용자 컬렉션을 허용합니다. 개체 또는 개체 컬렉션을 전달하는 경우 메일러는 수신자를 설정할 때 자동으로 emailname 속성을 ​​사용하므로 개체에서 이러한 속성을 사용할 수 있는지 확인하십시오. 수신자가 지정되면 메일 가능 클래스 인스턴스가 send 메소드에 전달될 수 있습니다. rrreee메시지를 보낼 때 수신자보다 더 많은 사람을 지정할 수 있습니다. "to", "cc", "bcc"에 대한 연쇄 호출을 통해 참조 및 숨은 참조 수신자를 한 번에 지정할 수도 있습니다.

rrreee

메일 가능 렌더링

rrreee🎜🎜🎜🎜🎜🎜🎜메일 가능 항목을 브라우저에서 미리 보기🎜🎜메일 가능 템플릿을 디자인할 때 다음과 같이 브라우저에서 메일 항목을 미리 보고 렌더링하는 것이 편리합니다. 블레이드 템플릿. 이 경우 Laravel을 사용하면 경로 폐쇄 또는 제어에서 직접 메일 가능한 항목을 반환할 수 있습니다. 반송된 메일은 브라우저에 렌더링되어 표시되며 실제 이메일 주소로 보내지 않고도 디자인을 빠르게 미리 볼 수 있습니다. 🎜rrreee🎜🎜🎜🎜🎜🎜🎜Mail Queue🎜🎜🎜

대기열에 이메일 메시지 추가

이메일 메시지를 보내면 애플리케이션의 응답 시간이 크게 연장될 수 있으므로 많은 개발자는 이메일 메시지를 대기열에 넣고 백그라운드에서 보내는 방식을 선택합니다. Laravel은 내장된 통합 대기열 API를 통해 이를 쉽게 수행합니다. 이메일 메시지를 대기열에 추가하려면 메시지 수신자를 지정한 후 Mail 파사드의 queue 메소드를 사용할 수 있습니다: Mail facade 的 queue 方法:

rrreee

此方法自动将作业推送到队列中以便消息在后台发送。使用此特性之前,需要 配置队列 :

延迟消息队列

想要延迟发送队列化的邮件消息,可以使用 later 方法。later 方法的第一个参数的第一个参数是标示消息何时发送的 DateTime 实例:

rrreee

推送到指定队列

由于所有使用 make:mail 命令生成的 mailable 类都是用了 IlluminateBusQueueable trait,因此你可以在任何 mailable 类实例上调用 onQueueonConnection 方法来指定消息的连接和队列名:

rrreee

默认队列

如果一个 mailable 类终是要队列化,可以在此类上实现 ShouldQueue 契约。这样一来,即使你在发送时调用了 send 方法, mailable 也将被序列化:

rrreee

本地化 Mailable

Laravel 允许你使用有别于当前语言的区域设置发送 mailable,即使被加入到队列中也保留该区域设置。

为达到此目的, Mail facade 提供了 locale 方法设置目标语言。应用在格式化 mailable 是将切换到该区域设置,并在格式化完成后恢复到原来的区域设置:

rrreee

用户首选区域设置

有时候,应用存储每个用户的首选区域设置。通过在一个或多个模型上实现 HasLocalePreference 契约,可以通知 Laravel 再发送邮件时使用预存的区域设置:

rrreee

一旦实现了此接口,Laravel 在向此模型发送 mailable 和通知时,将自动使用首选区域设置。因此在使用此接口时不需要调用 localerrreee

이 메소드는 자동으로 작업을 푸시합니다. 메시지가 백그라운드에서 전송되도록 대기열에 추가합니다. 이 기능을 사용하기 전에 대기열을 구성해야 합니다.

지연된 메시지 대기열

대기 중인 이메일 메시지 전송을 지연하려면 나중 방법. later 메소드의 첫 번째 매개변수는 메시지가 전송된 시간을 나타내는 DateTime입니다. 예:
rrreee

지정된 대기열로 푸시

make:mail 명령을 사용하여 생성된 모든 메일 가능 클래스는 IlluminateBusQueueable 특성을 사용하므로 모든 메일 가능 클래스에서 이를 사용할 수 있습니다. 메시지 연결 및 대기열 이름을 지정하기 위한 인스턴스의 code>onQueue
onConnection 메서드:
rrreee
🎜기본 대기열 🎜🎜메일링 가능한 클래스가 최종적으로 대기열에 추가되면 이 클래스에 ShouldQueue 계약을 구현할 수 있습니다. 이렇게 하면 보낼 때 send 메소드를 호출하더라도 메일 가능 항목이 직렬화됩니다. 🎜rrreee🎜🎜🎜
🎜🎜Localized Mailable🎜🎜Laravel을 사용하면 대기열에 추가된 경우에도 해당 로케일을 유지하면서 현재 언어와 다른 로케일을 사용하여 메일 가능 항목을 보낼 수 있습니다. 🎜🎜이 목적을 달성하기 위해 Mail 파사드는 대상 언어를 설정하는 locale 메소드를 제공합니다. 메일 가능 항목의 형식을 지정하는 애플리케이션은 이 로캘로 전환하고 형식이 완료된 후 원래 로캘로 돌아갑니다: 🎜rrreee
🎜

사용자 기본 로캘 설정🎜때때로 앱은 각 사용자가 선호하는 로케일을 저장합니다. 하나 이상의 모델에 HasLocalePreference 계약을 구현함으로써 Laravel이 이메일을 보낼 때 저장된 로케일을 사용하도록 지시할 수 있습니다: 🎜rrreee🎜이 인터페이스가 구현되면 Laravel은 메일 가능 항목과 알림을 이 모델로 보냅니다. 기본 로케일이 자동으로 사용됩니다. 따라서 이 인터페이스를 사용할 때 locale 메소드를 호출할 필요가 없습니다: 🎜rrreee🎜🎜🎜🎜🎜🎜🎜Mail & Local Development🎜🎜이메일을 보내는 애플리케이션을 개발할 때 실제로 메일을 보내려면 실시간 주소로 이메일을 보내세요. Laravel은 로컬 개발 중에 실제 전송을 "비활성화"하는 여러 가지 방법을 제공합니다. 🎜🎜🎜

로그 드라이버

log 이메일 드라이버는 이메일을 보내는 대신 볼 수 있도록 이메일 메시지를 로그에 기록합니다. 애플리케이션 환경 구성에 대한 자세한 내용은 구성 설명서를 참조하세요. log 邮件驱动采取将邮件消息写入日志取代发送邮件,已备查看。应用环境配置的更多消息,请查阅 配置文档。

通用配置

Laravel 为通过框架发送的邮件提供了指定常用收件人的其他解决方案。通过此方法,应用生成的邮件都将发送到指定地址,以取代发送消息时指定的真实地址。可以借助 config/mail.php 配置文件的 to 选项实现此目的:

rrreee

Mailtrap

最后,你可以使用 Mailtrap 服务和 smtp 驱动发送邮件消息到 「虚拟」邮箱,这样就可以在真实的邮件客户端查看邮件消息。此方法的好处是允许你在 Mailtrap 的消息阅览器中实际查看最终的邮件。

事件

Laravel 在处理邮件消息发送时触发两个事件。MessageSending 事件在消息发送前触发,MessageSent 事件则在消息发送后触发。切记,这些事件是在邮件被 发送 时触发,而不是在队列化的时候。可以在  EventServiceProvider

Universal ConfigurationLaravel은 프레임을 통해 전송된 이메일에 대한 일반 수신자를 지정하기 위한 추가 솔루션을 제공합니다. 이 방법을 사용하면 애플리케이션에서 생성된 이메일이 지정된 주소로 전송되며, 메시지를 보낼 때 지정된 실제 주소를 대체합니다. 이는 config/mail.php 구성 파일의 to 옵션을 사용하여 수행할 수 있습니다:
rrreee
🎜Mailtrap 🎜🎜마지막으로 Mailtrap🎜 서비스와 smtp 드라이버를 사용하여 이메일 메시지를 "가상"으로 보낼 수 있습니다. 실제 이메일에서 사용할 수 있도록 메일함 클라이언트가 이메일 메시지를 봅니다. 이 방법의 장점은 Mailtrap의 메시지 뷰어에서 최종 이메일을 실제로 볼 수 있다는 것입니다. 🎜🎜🎜🎜
🎜

이벤트

🎜Laravel은 이메일 메시지 전송을 처리할 때 두 가지 이벤트를 트리거합니다. MessageSending 이벤트는 메시지가 전송되기 전에 트리거되고, MessageSent 이벤트는 메시지가 전송된 후에 트리거됩니다. 이러한 이벤트는 이메일이 대기열에 있을 때가 아니라 이메일이 전송될 때 트리거된다는 점을 기억하세요. 이 이벤트의 리스너는 EventServiceProvider에 등록할 수 있습니다. 🎜rrreee🎜이 기사는 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜