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 − 添加 'From' 地址。
addFrom(
string|AddressInterface|array|AddressList|Traversable $emailOrAddressOrList,
string|null $name
) : void
getFrom − 检索 'From' 发件人列表。
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 提供通过 Zend\Mail\Transport\Smtpclass 使用 SMTP 服务器发送电子邮件的选项。它与 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 传输层并添加必要的配置。
// 使用 LOGIN 身份验证设置 SMTP 传输
$transport = new SmtpTransport();
$options = new SmtpOptions([
'name' => 'localhost',
'host' => 'smtp.gmail.com', // 或任何 SMTP 服务器
'port' => 465, // SMTP 服务器正在监听的端口
'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!");
// 使用 LOGIN 身份验证设置 SMTP 传输
$transport = new SmtpTransport();
$options = new SmtpOptions([
'name' => 'localhost',
'host' => 'smtp.gmail.com', // 或任何 SMTP 服务器
'port' => 465, // SMTP 服务器正在监听的端口
'connection_class' => 'login',
'connection_config' => [
'username' => '<your username>', 'password' => '<your password>',
'ssl' => 'ssl'],
]);
$transport->setOptions($options);
$transport->send($message);
现在,在命令提示符中运行应用程序 php Mail.php。这将按照应用程序中的配置发送邮件。

