Swift Mailer 邮件消息创建指南
概述
Swift Mailer 是一个功能强大的 PHP 邮件发送库,它提供了创建复杂邮件消息的简单方法。本文将详细介绍如何使用 Swift Mailer 创建各种类型的邮件消息,包括基本消息结构、内容添加和附件处理等核心功能。
创建基本邮件消息
创建邮件消息类似于在邮件客户端中点击"撰写"按钮的过程。你需要指定主题、收件人、添加附件并编写消息内容。
// 创建消息对象
$message = (new Swift_Message())
// 设置邮件主题
->setSubject('您的主题')
// 设置发件人(支持名称显示)
->setFrom(['john@doe.com' => 'John Doe'])
// 设置收件人(支持多个收件人)
->setTo(['receiver@domain.org', 'other@domain.org' => 'A name'])
// 设置邮件正文
->setBody('这里是邮件正文内容')
// 添加HTML格式的替代正文(可选)
->addPart('<q>这里是HTML格式的正文</q>', 'text/html')
// 添加附件(可选)
->attach(Swift_Attachment::fromPath('my-document.pdf'));
消息结构详解
邮件消息由多个MIME实体组成,每个实体都包含头部(Headers)和正文(Body)两部分:
Header-Name: 头部值
Other-Header: 另一个值
这里是正文内容
Swift Mailer 通过使用编码器和不同类型的头部对象来确保这些实体符合RFC规范。
消息头部字段
Swift_Message 提供了许多标准邮件头部的访问方法:
| 头部字段 | 描述 | 访问方法 | |---------|------|---------| | Message-ID | 消息唯一标识符 | getId() / setId() | | Return-Path | 退回邮件地址 | getReturnPath() / setReturnPath() | | From | 发件人地址 | getFrom() / setFrom() | | Sender | 实际发送者地址 | getSender() / setSender() | | To | 收件人地址 | getTo() / setTo() | | Cc | 抄送地址 | getCc() / setCc() | | Bcc | 密送地址 | getBcc() / setBcc() | | Reply-To | 回复地址 | getReplyTo() / setReplyTo() | | Subject | 邮件主题 | getSubject() / setSubject() | | Date | 发送日期 | getDate() / setDate() | | Content-Type | 内容类型 | getContentType() / setContentType() | | Content-Transfer-Encoding | 内容编码 | getEncoder() / setEncoder() |
添加邮件内容
设置主题
主题是收件人最先看到的内容,可以通过构造函数或setSubject()方法设置:
// 通过构造函数设置
$message = new Swift_Message('我的主题');
// 或通过方法设置
$message->setSubject('我的主题');
设置正文内容
邮件正文是收件人打开邮件时看到的主要内容。通常我们会同时提供纯文本和HTML两种格式:
// 通过构造函数设置
$message = new Swift_Message('主题', '我的正文');
// 设置HTML正文
$message->setBody('我的<em>精彩</em>正文', 'text/html');
// 添加纯文本替代版本
$message->addPart('我的纯文本正文', 'text/plain');
最佳实践:发送HTML邮件时,总是包含纯文本版本,以确保所有邮件客户端都能正确显示。
处理附件
附件是邮件的可下载部分,可以通过attach()方法添加到消息中。
添加现有文件附件
可以附加本地文件或远程URL(需开启allow_url_fopen):
// 创建附件(内容类型可选)
$attachment = Swift_Attachment::fromPath('/path/to/image.jpg', 'image/jpeg');
// 附加到消息
$message->attach($attachment);
// 一行写法
$message->attach(Swift_Attachment::fromPath('/path/to/image.jpg'));
// 附加远程文件
$message->attach(Swift_Attachment::fromPath('http://site.tld/logo.png'));
自定义附件文件名
默认使用原文件名,但可以自定义:
$message->attach(
Swift_Attachment::fromPath('/path/to/image.jpg')
->setFilename('custom-name.jpg')
);
添加动态生成的附件
无需写入磁盘,可直接附加运行时生成的内容:
// 生成PDF数据
$data = generate_pdf_data();
// 创建并附加附件
$message->attach(
new Swift_Attachment($data, 'my-file.pdf', 'application/pdf')
);
// 或使用方法链
$attachment = (new Swift_Attachment())
->setFilename('my-file.pdf')
->setContentType('application/pdf')
->setBody($data);
设置附件显示方式
默认附件可下载,也可设置为内联显示:
$message->attach(
Swift_Attachment::fromPath('/path/to/image.jpg')
->setDisposition('inline')
);
嵌入内联媒体
要在HTML邮件中内嵌图片等媒体,可使用embed()方法:
// 在HTML中引用嵌入的图片
$html = '<img src="'.$message->embed(Swift_Image::fromPath('image.jpg')).'" />';
$message->setBody($html, 'text/html');
嵌入动态生成的媒体
无需创建临时文件,可直接嵌入:
// 生成图片数据
$imgData = create_image_data();
// 创建并嵌入图片
$cid = $message->embed(new Swift_Image($imgData, 'image.jpg', 'image/jpeg'));
$message->setBody('<img src="'.$cid.'" />', 'text/html');
总结
Swift Mailer 提供了强大而灵活的方式来创建各种复杂的邮件消息。通过理解消息的基本结构和掌握内容添加、附件处理等核心功能,你可以轻松创建符合专业标准的电子邮件。记住总是提供纯文本替代版本,并合理使用内嵌资源,以确保最佳的邮件兼容性和用户体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考