lucinda / mailing
一个非常轻量级的PHP API,用于发送电子邮件和数字签名,涵盖了RFC-4021 & RFC-6376规范的大部分重要部分
Requires
- php: ^8.1
- ext-fileinfo: *
- ext-mbstring: *
- ext-openssl: *
This package is auto-updated.
Last update: 2024-09-13 11:33:02 UTC
README
一个非常轻量级的PHP API,涵盖了RFC-4021的大部分重要部分,这是目前全球通用的电子邮件发送标准,以及RFC-6376用于数字签名。
API需要PHP 8.1+,并包含四个类,所有这些类都属于Lucinda\Mail命名空间
- Address:封装电子邮件地址,由电子邮件值和关联的用户名称组成
- DKIM:使用对php-mail-signature类的重度重构版本创建DKIM-Signature标题
- Exception:封装任何阻止电子邮件发送的逻辑错误
- Message:封装电子邮件消息
通过以下公共方法通过类 Message 封装整个电子邮件消息的逻辑
简单示例
$message = new \Lucinda\Mail\Message("test subject", "<p>Hello, <strong>world</strong>!</p>"); $message->setMessageID("example.com"); // recommended to prevent message being labeled as spam $message->setDate(time()); // signals that message was written now $message->setContentType("text/html", "UTF-8"); // recommended, unless message is ASCII plaintext $message->addTo(new Address("receiver@asd.com")); // mandatory $message->setReplyTo(new Address("sender@example.com", "John Doe")); // recommended if message can be replied to $message->send();
__construct
此方法通过以下参数构造邮件消息
addAttachment
根据参数将附件添加到消息体
示例
$message->addAttachment("/foo/bar/baz.jpg");
setFrom
根据参数设置消息作者的地址,收件人可以看到(请参阅from标题)
通常调用此方法是不必要的,除非开发人员希望使用不同的默认值。
示例
$message->setFrom(new \Lucinda\Mail\Address("sender@example.com", "Example.com Team"));
setSender
根据参数设置消息作者的地址,目标邮件服务器可以看到(请参阅from标题)
应与from地址相同,除非邮件服务器代表其他人发送消息。
示例
$message->setSender(new \Lucinda\Mail\Address("sender@example.com", "Example.com Team"));
setReplyTo
根据参数设置发送消息回复的地址(请参阅Reply-To标题)
如果我们希望消息被回复,则始终应设置此选项。
示例
$message->setReplyTo(new \Lucinda\Mail\Address("sender@example.com", "Example.com Team"));
addTo
根据参数将地址添加到发送消息的目标地址(请参阅To标题)
必须始终设置至少一个地址!
示例
$message->addTo(new \Lucinda\Mail\Address("destination@server.com"));
addCC
根据参数将地址添加到发送消息副本的目标地址,允许其他人注意到(请参阅Cc标题)
示例
$message->addCC(new \Lucinda\Mail\Address("destination@server.com"));
添加BCC
将地址添加到发送副本而不让其他人知道的消息中(参见:Bcc 头部)
示例
$message->addBCC(new \Lucinda\Mail\Address("destination@server.com"));
setContentType
根据以下参数设置消息主体的内容类型和字符集(参见:Content-Type 头部)
示例
$message->setContentType("text/html", "UTF-8");
setDate
根据参数设置发送消息的自定义日期(参见:Date 头部)
通常,除非您想欺骗接收者认为它是在不同的日期发出的,否则通常没有必要发送此头部。
示例
$message->setDate(time()-1000);
setMessageID
根据参数设置要发送的消息的唯一ID(参见:Message-ID 头部)
强烈建议发送此头部,以防止您的消息被接收邮件服务器标记为垃圾邮件!
示例
$message->setMessageID("example.com");
setSignature
根据参数设置要发送的消息的数字签名(参见:DKIM-Signature 头部)
为了防止您的消息被接收邮件服务器标记为垃圾邮件,强烈建议设置此头部!要获取上面参数的值,请遵循此指南
- 转到 https://tools.socketlabs.com/dkim/generator
- 填写 hostname,这将是上面 $domainName 的值(例如:"example.com")
- 写入一个 $dnsSelector "subdomain"(例如:"dkim")
- 点击 GENERATE 按钮
- 为 $selector._domainkey.$domainName 创建一个 DNS TXT 记录,其中值是 "Step 2: 创建您的公共 DNS 记录" 下显示的字符串
- 将 "Step 3: 将私钥保存到您的 SMTP 服务器" 部分下显示的私钥存储在某个位置。这将成为 $rsaPrivateKey 的值
- 由于您没有设置密码生成密钥,因此 $rsaPassphrase 将始终是空字符串 ""
- 现在,最后您必须选择要从中生成签名的头部名称列表(例如:["From", "Message-ID", "Content-Type"])使用 $signedHeaders。请参阅:建议了解应选择哪些内容!
生成 DKIM-Signature 头部使用的算法是从 php-mail-signature 中获取的,并完全重构,因为原始版本是混乱的,编程不佳。最终结果是类 DKIM!
示例
$message->setSignature("-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----", "", "example.com", "dkim", [ "From", "Reply-To", "Subject", "To" ]);
addCustomHeader
使用以下参数添加上面命令未涵盖的 RFC-4021 头部
示例
$message->addCustomHeader("List-Unsubscribe", "<mailto: unsubscribe@example.com>");
上述命令添加了一个 List-Unsubscribe 头部,允许用户通过点击按钮退订邮件列表。
send
打包消息主体和头部,将后者与 DKIM-Signature(如果可用)编译在一起,并向目的地发送邮件。
示例
$message->send();