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('[email protected]', "sender-name"); 
$mail->addTo('[email protected]', "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('[email protected]'); 
$message->addFrom('[email protected]'); 
$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('[email protected]'); 
$message->addFrom('[email protected]'); 
$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。这将根据应用程序中配置的方式发送邮件。

广告