hell-sh / mail-transfer
此包的最新版本(dev-senpai)没有提供许可证信息。
一个库,让您可以轻松地用PHP编写自定义的电子邮件服务器和客户端。
dev-senpai
2021-10-07 00:22 UTC
Requires
- php: >=7.1
- ext-openssl: *
- hell-sh/asyncore: ^2.1
- mlocati/spf-lib: ^3.1
Requires (Dev)
- hell-sh/nose: ^1.1
This package is auto-updated.
Last update: 2024-09-07 07:09:31 UTC
README
一个库,让您可以轻松地用PHP编写自定义的电子邮件服务器和客户端。
composer require hell-sh/mail-transfer:dev-senpai
工作中!
我之所以这么早发布,唯一的原因是我想使用“dev-senpai”构建一个自定义服务器。
尚未完成的一些事情
- 多部分内容
- 附件
- DKIM 子域考虑事项
- 服务器:动态 & 静态 SIZE
示例
服务器
<?php require "vendor/autoload.php"; (new Email\Server( __DIR__."/fullchain.pem", __DIR__."/privkey.pem", Email\Server::BIND_ADDR_ALL, [25], Email\Session::DEFAULT_READ_TIMEOUT, Email\Connection::LOGFUNC_ECHO ))->onEmailReceived(function(Email\Email $email, Email\Session $sender) { $subject = ($email->getSubject() ?: "(no subject)"); $classification = $email->getFirstHeaderValue("X-Classification"); echo "Received \"$subject\" from {$email->getSender()} ($classification)".PHP_EOL; }) ->loop();
反垃圾邮件
虽然SPF、DKIM和DMARC都擅长防止欺骗,但真正的问题是垃圾邮件,在服务器上没有100%有效的解决方法,但黑名单迄今为止最有希望。
- 如果您想全力以赴,不仅阻止垃圾邮件,还要教训那些视而不见的服务提供商,请使用UCEPROTECT:
$server->setBlocklists(["dnsbl-1.uceprotect.net", "dnsbl-2.uceprotect.net", "dnsbl-3.uceprotect.net"]);
- 如果您觉得这太过极端,可以考虑只使用他们的1级或2级列表。
- 如果您想更实际一些,JustSpam.org 似乎适合仅阻止垃圾邮件:
$server->setBlocklists(["dnsbl.justspam.org"]);
客户端
<?php require "vendor/autoload.php"; Email\Email::basic( new Email\Address("Sender <sender@localhost>"), new Email\Address("recipient@localhost"), /* Subject: */ "Saying hello to the world", new Email\ContentTextPlain("Hello, world!") )->sign(new Email\DkimKey("php", "file://".__DIR__."/dkim-private.pem")) ->sendToRecipient( Email\Client::DEFAULT_CONNECT_TIMEOUT, Email\Client::DEFAULT_READ_TIMEOUT, Email\Connection::LOGFUNC_ECHO ); Asyncore\Asyncore::loop();
设置
这样您就可以正确地发送电子邮件。
首先,请确保您在一个公共机器上,具有IPv4 & IPv6的已确认反向DNS记录(或者更普遍地说,您的机器可能用于出站连接的任何IP)。如果不是这种情况,可能会有各种微妙的问题。
接下来,通过终端使用openssl生成DKIM的RSA密钥对
openssl genrsa -out dkim-private.pem 2048 openssl rsa -in dkim-private.pem -out dkim-public.pem -pubout -outform PEM
最后,设置DNS记录
selector
也是new Email\DkimKey
的第一个参数,基本上是DKIM密钥的名称。base64-encoded public key
表示单行中dkim-public.pem
的实际内容,没有BEGIN & END KEY包装。policy
是当使用此域名发送未经认证的电子邮件时要执行的操作reject
: 拒绝它quarantine
: 将其放入垃圾邮件none
: 允许它
在开发此软件过程中引用的一些RFC
- RFC 2045 - MIME第1部分
- RFC 2047 - MIME第3部分
- RFC 4871 - DKIM
- RFC 5321 - ESMTP
- RFC 5322 - 互联网消息格式
- RFC 7489 - DMARC
SPF由 mlocati/spf-lib 实现,在MIT许可下发布。