Zend Framework - 郵件管理



Zend Framework 提供了一個名為 zend-mail 的獨立元件來發送郵件。zend-mail 元件還提供了一個選項,可以使用文字和 html 格式讀取和寫入帶附件的郵件。在 Zend 中傳送郵件非常簡單易於配置。

在本章中,我們將學習郵件的概念、基本設定以及 SMTP 傳輸等高階設定。

安裝郵件元件

可以使用以下 Composer 命令安裝郵件元件。

composer require zendframework/zend-mail

基本郵件配置

一封基本的郵件包含一個或多個收件人、主題、正文和發件人。Zend 提供了 Zend\Mail\Message 類來建立一個新的郵件訊息。要使用 zend-mail 傳送郵件,您必須至少指定一個收件人和郵件正文。

建立新郵件訊息的部分程式碼如下所示:

use Zend\Mail;
$mail = new Mail\Message(); 
$mail->setSubject('Zend email sample'); 
$mail->setBody('This is content of the mail message'); 
$mail->setFrom('sender@example.com', "sender-name"); 
$mail->addTo('recipient@test.com', "recipient-name"); 

Zend 提供了 Zend\Mail\Sendmail 類來發送郵件訊息。Sendmail 使用 php 原生郵件函式 mail 傳送郵件訊息,我們可以使用 php 配置檔案配置傳輸層。

使用 Sendmail 的部分程式碼如下所示:

$transport = new Mail\Transport\Sendmail(); 
$transport->send($mail);

zend-mail 提供了許多傳輸層,每個傳輸層可能需要許多額外的引數,例如使用者名稱、密碼等。

郵件管理方法

一些值得注意的郵件管理方法如下:

  • isValid - 沒有“發件人”地址的訊息是無效的。

isValid() : bool
  • setEncoding - 設定訊息編碼。

setEncoding(string $encoding) : void
  • getEncoding - 獲取訊息編碼。

getEncoding() : string
  • setHeaders - 編寫郵件頭。

setHeaders(Zend\Mail\Headers $headers) : void
  • getHeaders - 訪問郵件頭集合。

getHeaders() : Zend\Mail\Headers
  • setFrom - 設定(覆蓋)發件人地址。它包含鍵值對,其中鍵是人類可讀的名稱,值是電子郵件地址。

setFrom( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressList, 
      string|null $name 
) : void 
  • addFrom - 新增“發件人”地址。

addFrom( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressOrList, 
      string|null $name 
) : void 
  • getFrom - 檢索“發件人”列表。

getFrom() : AddressList 
setTo - Overwrite the address list in the To recipients. 
setTo( 
   string|AddressInterface|array|AddressList|Traversable $emailOrAddressList, 
      null|string $name 
) : void 
  • setSubject - 設定郵件主題標題值。

setSubject(string $subject) :void 
  • setBody - 設定郵件正文。

setBody(null|string|Zend\Mime\Message|object $body) : void 

SMTP 傳輸層

zend-mail 提供了使用 SMTP 伺服器傳送郵件的選項,透過 Zend\Mail\Transport\Smtpclass 實現。它類似於 Sendmail,但它有一些額外的選項來配置 SMTP 主機、埠、使用者名稱、密碼等。

部分程式碼如下所示:

use Zend\Mail\Transport\Smtp as SmtpTransport; 
use Zend\Mail\Transport\SmtpOptions;  
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' =>'smtp.gmail.com', 
   'port' => 465, 
]); 
$transport->setOptions($options); 

這裡,

  • name - SMTP 主機的名稱。

  • host - 遠端主機名或 IP 地址。

  • port - 遠端主機正在監聽的埠。

郵件概念 - 示例

讓我們按照以下步驟編寫一個簡單的 php 控制檯應用程式來理解郵件概念。

  • 建立一個名為“mailapp”的資料夾。

  • 使用 composer 工具安裝 zend-mail

  • 在“mailapp”資料夾內建立一個 php 檔案 Mail.php

  • 使用 Zend\Mail\Message 建立郵件。

$message = new Message(); 
$message->addTo('user1@gmail.com'); 
$message->addFrom('user2@gmail.com'); 
$message->setSubject('Hello!'); 
$message->setBody("My first Zend-mail application!"); 
  • 建立 SMTP 傳輸層並新增必要的配置。

// Setup SMTP transport using LOGIN authentication 
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' => 'smtp.gmail.com', // or any SMTP server 
   'port' => 465, // port on which the SMTP server is listening 
   'connection_class' => 'login', 
   'connection_config' => [ 
      username' => '<your username>', 'password' => '<your password>', 
      'ssl' => 'ssl'], 
]); 
$transport->setOptions($options); 
  • 使用 send 方法傳送郵件。

$transport->send($message);

完整的清單,Mail.php 如下所示:

<?php  
require __DIR__ . '/vendor/autoload.php';  

use Zend\Mail\Message; 
use Zend\Mail\Transport\Smtp as SmtpTransport; 
use Zend\Mail\Transport\SmtpOptions;  
  
$message = new Message(); 
$message->addTo('user1@gmail.com'); 
$message->addFrom('user2@gmail.com'); 
$message->setSubject('Hello!'); 
$message->setBody("My first Zend-mail application!");  
  
// Setup SMTP transport using LOGIN authentication 
$transport = new SmtpTransport(); 
$options = new SmtpOptions([ 
   'name' => 'localhost', 
   'host' => 'smtp.gmail.com', // or any SMTP server 
   'port' => 465, // port on which the SMTP server is listening 
   'connection_class' => 'login', 
   'connection_config' => [ 
      'username' => '<your username>', 'password' => '<your password>', 
      'ssl' => 'ssl'], 
]); 
$transport->setOptions($options); 
$transport->send($message);

現在,在命令提示符中執行應用程式 php Mail.php。這將根據應用程式中配置的方式傳送郵件。

廣告

© . All rights reserved.