【问题标题】:DKIM with Nette Mail使用 Nette Mail 的 DKIM
【发布时间】:2018-03-18 21:52:25
【问题描述】:

我计划使用 php-mail-signature (https://github.com/louisameline/php-mail-signature) 对我的邮件进行签名,但我在 Nette-Mail 消息类 (https://api.nette.org/2.4/Nette.Mail.Message.html) 中找不到设置 DKIM 值的方法。

由于我认为这或多或少是基本功能,我想知道是否真的无法将 DKIM 与 Nette Mail 一起使用。

有可能吗,如果有,我该怎么做?

【问题讨论】:

  • 您要设置什么 DKIM 值?当电子邮件经过 DKIM 签名时,签名将作为标题添加到该电子邮件。建议您在签名后不要修改电子邮件或其标题,因为您可能会破坏签名。我不认识 Nette,但我猜你可以像发送任何其他消息一样发送签名消息。
  • 问题是 php-mail-signature 给了我签名,我必须把它交给 Nette-Mail。如果我像往常一样发送邮件,则邮件未签名。

标签: email sign spam-prevention dkim nette


【解决方案1】:

问题是,php-mail-signature 太低级了。它以字符串形式返回签名的标头。您需要解析$signature->get_signed_headers() 输出并为它们中的每一个调用$message->setHeader()。如果您正在寻找一些神奇的方法$message->setDkimSignature(),您将找不到它。但是你总是可以从Message类继承并编写你自己的。

这只是未经测试的示例:

<?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();
    }
}

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2012-09-30
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多