带 Nette 邮件的 DKIM
DKIM with Nette Mail
我计划使用 php-mail-signature (https://github.com/louisameline/php-mail-signature), but I can't find a method in the Nette-Mail Message class (https://api.nette.org/2.4/Nette.Mail.Message.html) 对我的邮件进行签名以设置 DKIM 值。
因为我认为这或多或少是基本功能,所以我想知道是否真的无法将 DKIM 与 Nette Mail 一起使用。
这可能吗?如果可以,我该怎么做?
问题是,php-mail-signature
太多了 low-level。它 returns 将 headers 签名为字符串。您需要解析 $signature->get_signed_headers()
输出并为每个输出调用 $message->setHeader()
。如果您正在寻找一些神奇的方法 $message->setDkimSignature()
,您将找不到它。但是你总是可以从 Message
class 继承并编写你自己的。
这只是 non-tested 示例:
<?php
use mail_signature;
use Nette\Mail\Message;
final class DkimSignedMessage extends Message
{
/**
* @var mail_signature
*/
private $signature;
public function __construct(mail_signature $signature)
{
$this->signature = $signature;
}
public function generateMessage(): string
{
$message = $this->build();
$signedHeaders = $this->signature->get_signed_headers(
$message->getTo(),
$message->getSubject(),
$message->getBody(),
implode("\r\n", $message->getHeaders())
);
foreach (explode("\r\n", trim($signedHeaders)) as $header) {
[$name, $value] = explode(': ', $header);
$message->setHeader($name, trim($value))
}
return $message->getEncodedMessage();
}
}
我计划使用 php-mail-signature (https://github.com/louisameline/php-mail-signature), but I can't find a method in the Nette-Mail Message class (https://api.nette.org/2.4/Nette.Mail.Message.html) 对我的邮件进行签名以设置 DKIM 值。
因为我认为这或多或少是基本功能,所以我想知道是否真的无法将 DKIM 与 Nette Mail 一起使用。
这可能吗?如果可以,我该怎么做?
问题是,php-mail-signature
太多了 low-level。它 returns 将 headers 签名为字符串。您需要解析 $signature->get_signed_headers()
输出并为每个输出调用 $message->setHeader()
。如果您正在寻找一些神奇的方法 $message->setDkimSignature()
,您将找不到它。但是你总是可以从 Message
class 继承并编写你自己的。
这只是 non-tested 示例:
<?php
use mail_signature;
use Nette\Mail\Message;
final class DkimSignedMessage extends Message
{
/**
* @var mail_signature
*/
private $signature;
public function __construct(mail_signature $signature)
{
$this->signature = $signature;
}
public function generateMessage(): string
{
$message = $this->build();
$signedHeaders = $this->signature->get_signed_headers(
$message->getTo(),
$message->getSubject(),
$message->getBody(),
implode("\r\n", $message->getHeaders())
);
foreach (explode("\r\n", trim($signedHeaders)) as $header) {
[$name, $value] = explode(': ', $header);
$message->setHeader($name, trim($value))
}
return $message->getEncodedMessage();
}
}