[英]How to properly hash body and headers with PHP for dkim?
我检查了Eric Vyncke的PHP dkim脚本,并复制了他如何对电子邮件中设置的DKIM标头进行哈希处理
$DKIM_bh = base64_encode(pack('H*', sha1($body)));
可以这样使用:
'bh='.$DKIM_bh.';'//...
但是,当我验证电子邮件时,它告诉我哈希不匹配。
$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))).';';//...
我不确定我缺少什么? 如何正确地对正文和标头进行哈希处理,以便可以正确设置标头的DKIM值?
这是示例函数,该示例函数如何使用dkim和php mail()函数发送电子邮件:
https://github.com/breakermind/PHP-DKIM
适用于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.