- Zend Framework 教程
- Zend Framework - 首頁
- Zend Framework - 簡介
- Zend Framework - 安裝
- 框架應用
- Zend Framework - MVC 架構
- Zend Framework - 概念
- Zend Framework - 服務管理器
- Zend Framework - 事件管理器
- Zend Framework - 模組系統
- 應用結構
- Zend Framework - 建立模組
- Zend Framework - 控制器
- Zend Framework - 路由
- Zend Framework - 檢視層
- Zend Framework - 佈局
- 模型 & 資料庫
- 不同的資料庫
- 表單 & 驗證
- Zend Framework - 檔案上傳
- Zend Framework - Ajax
- Cookie 管理
- Session 管理
- Zend Framework - 認證
- 郵件管理
- Zend Framework - 單元測試
- Zend Framework - 錯誤處理
- Zend Framework - 工作示例
- Zend Framework 有用資源
- Zend Framework - 快速指南
- Zend Framework - 有用資源
- Zend Framework - 討論
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。這將根據應用程式中配置的方式傳送郵件。