简体   繁体   English

如何使用PHP为dkim正确散列正文和标头?

[英]How to properly hash body and headers with PHP for dkim?

I've gone through Eric Vyncke's PHP dkim script and copied how he was doing hashes for DKIM headers set in emails 我检查了Eric Vyncke的PHP dkim脚本,并复制了他如何对电子邮件中设置的DKIM标头进行哈希处理

$DKIM_bh = base64_encode(pack('H*', sha1($body)));

Would be used as so: 可以这样使用:

'bh='.$DKIM_bh.';'//...

However when I validate the email message it tells me that the hash doesn't match. 但是,当我验证电子邮件时,它告诉我哈希不匹配。

$headers .= 'DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/simple; q=dns/txt; bh=';//...

$body = 'Test PHP+SMTP authenticated email,3.';

bh='.base64_encode(pack('H*', sha1($body))).';';//...

I'm not sure what I'm missing? 我不确定我缺少什么? How do I properly hash the body and headers so I can set the DKIM values for the header properly? 如何正确地对正文和标头进行哈希处理,以便可以正确设置标头的DKIM值?

Here is example functions how to send emails with dkim and php mail() function: 这是示例函数,该示例函数如何使用dkim和php mail()函数发送电子邮件:

https://github.com/breakermind/PHP-DKIM https://github.com/breakermind/PHP-DKIM

Works on Gmail.com and multipart/mixed messages with attachments! 适用于Gmail.com以及包含附件的多部分/混合消息!

<?php
// Send simple email without DKIM SIgning
// YOUR E-MAIL
$name = 'Name Jony';
$sender = 'sdsdso@domain.pl';
$to = 'ffffu@gmail.com';
$subject = 'Simple html message with dkim';

$headers =
'MIME-Version: 1.0
From: "'.$name.'" <'.$sender.'>
Content-type: text/html; charset=utf8';

$message =
'<html>
    <header></header>
    <body>
        Hello, this a DKIM test e-mail
    </body>
</html>';

// NOW YOU WILL DO (after setting up the config file and your DNS records) :
// Make sure linefeeds are in CRLF format - it is essential for signing
$message = preg_replace('/(?<!\r)\n/', "\r\n", $message);
$headers = preg_replace('/(?<!\r)\n/', "\r\n", $headers);

require_once 'mail-signature.class.php';
require_once 'mail-signature.config.php';

$signature = new mail_signature(
    MAIL_RSA_PRIV,
    MAIL_RSA_PASSPHRASE,
    MAIL_DOMAIN,
    MAIL_SELECTOR
);
$signed_headers = $signature -> get_signed_headers($to, $subject, $message, $headers);

// Send email
ini_set('sendmail_from', $sender);
echo mail($to, $subject, $message, $signed_headers.$headers);
die();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM