genkgo/mail

用于通过不同传输和协议(如SMTP和IMAP)发送电子邮件的库,使用不可变消息和流。还包括SMTP服务器。

2.12.1 2024-05-31 14:42 UTC

README

Latest Version workflow code check

在分析重构代码库时使用哪个邮件库时,我们发现现有的库大多是旧库。一些库没有使用命名空间,我们遇到的每个库都只是一个标量属性包的集合,而不是使用封装的对象。虽然我们过去曾愉快地使用这些库,但它们不符合当前的质量标准。因此,我们根据现代编程原则构建了一个新的更好的库。

如果您想使用不可变消息和流在不同的传输和协议上发送电子邮件,请使用此库。

快速轻松发送消息

use Genkgo\Mail;

$message = (new Mail\MessageBodyCollection('<html><body><p>Hello World</p></body></html>'))
    ->withAttachment(new Mail\Mime\FileAttachment('/order1.pdf', new Mail\Header\ContentType('application/pdf')))
    ->createMessage()
    ->withHeader(new Mail\Header\Subject('Hello World'))
    ->withHeader(Mail\Header\From::fromEmailAddress('from@example.com'))
    ->withHeader(Mail\Header\To::fromSingleRecipient('to@example.com', 'name'))
    ->withHeader(Mail\Header\Cc::fromSingleRecipient('cc@example.com', 'name'));

$transport = new Mail\Transport\SmtpTransport(
    Mail\Protocol\Smtp\ClientFactory::fromString('smtp://user:pass@host/')->newClient(),
    Mail\Transport\EnvelopeFactory::useExtractedHeader()
);

$transport->send($message);

使用composer安装

$ composer require genkgo/mail

特性

  • 使用SMTP或mail()发送消息
  • 使用IMAPv4从您的邮箱中读取消息(无需扩展)
  • 创建回复和转发消息,包括引用原始消息
  • 在传输失败时排队消息
  • 自动连接和断开连接到SMTP服务器
  • 自动生成格式化消息的替代文本
  • 最佳编码的标题,因此没有过量的编码标题
  • 最佳编码的多部分消息
  • 只有流和连接是可变的
  • 消息和演员是不可变的
  • 值对象可以防止无效状态
  • 流确保库具有较低的内存负担
  • 许多对象,但API仍然简单易用
  • 90%+的测试覆盖率
  • 使用最高的PHPStan检测级别
  • 如果可能,则仅使用TLS < 1.2
  • 不建议使用SSL
  • DKIM签名的消息
  • 安全性是首要任务
  • 用于测试的SMTP服务器
  • 优秀的RFC兼容性
  • 将消息转换为有效的字符串源
  • 库没有外部依赖(但使用intl扩展)
  • 仅支持非EOL的PHP版本

即将推出的功能

  • 加密和签名消息

未计划

以下功能未由所有者开发,但在社区采取行动时可能成为库的一部分。

  • POP支持
  • 邮箱抽象层

文档

RFC兼容性

该库力求尽可能符合电子邮件RFC。它应与以下RFC兼容。

致谢

如果没有Zend/MailPHPMailer,这个库就无法存在。