从php发送数字签名的电子邮件到Gmail的问题

时间:2018-05-17 17:06:32

标签: php mime-types digital-signature phpbb smime

我正在尝试通过PHPBB发送经过数字签名的电子邮件。我的所有交换电子邮件和所有各种客户端都运行良好,但它不适用于gmail用户。似乎谷歌似乎没有处理/阅读多部分哑剧类型。也许我错过了一些愚蠢或容易的事情?谢谢你的期待!

以下是测试电子邮件的示例,证书被#:

阻止
  

这是一条S / MIME签名邮件

     

------ ############################ Content-Type:text / html;字符集=" ISO-8859-1"

     

Content-Transfer-Encoding:8位

     

Hello admin,

     

祝贺。如果您收到此电子邮件,phpBB是正确的   配置为发送电子邮件。

     

如果您需要帮助,请访问phpBB支持论坛    - https://www.phpbb.com/community/

     

-

     

------ ############################ Content-Type:   应用程序/ x-PKCS7签名;命名=" smime.p7s"   Content-Transfer-Encoding:base64 Content-Disposition:attachment;   文件名=" smime.p7s"

     #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      #      

------ ############################ -

以下是我正在使用的代码片段:

// Send message ...
$mail_to = ($to == '') ? 'undisclosed-recipients:;' : $to;
$fp = fopen("/var/www/ssl/ext/phpbbservices/digests/includes/msg.txt", "w"); 
$this->msg = "".'Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 8bit'. "\n\n" .  $this->msg . "\n";
fwrite($fp, $this->msg); 
fclose($fp);

openssl_pkcs7_sign("/var/www/ssl/ext/phpbbservices/digests/includes/msg.txt", "/var/www/ssl/ext/phpbbservices/digests/includes/signed.txt", file_get_contents("/var/www/ssl/ext/phpbbservices/digests/includes/publicCert.pem"), array(file_get_contents("/var/www/ssl/ext/phpbbservices/digests/includes/privateKey.pem"), 'PASSWORD_FOR_PRIVATE_KEY'), $headers); 
$data = file_get_contents("/var/www/ssl/ext/phpbbservices/digests/includes/signed.txt");


$parts = explode("\n\n", $data, 2);
$newHeader = explode("\n", $parts[0]);

$newMessage =  $parts[1];


$result = phpbb_mail($mail_to, $this->subject, $newMessage, $newHeader, PHP_EOL, $err_msg);   

1 个答案:

答案 0 :(得分:1)

这很简单! 交换标头与我在signed.txt处理文件中的标头不匹配。所以我挖了它,发现phpBB系统正在创建一个标题,包括Content-Type:text / html;字符集的字符集= =" ISO-8859-1” 。所以标题有两个,那个和正确的"内容类型:multipart / signed;协议="应用程序/ x-PKCS7签名&#34 ;; micalg =" sha-256“;”Exchange修改了标题,只是忽略/清除了第一个条目,而谷歌忽略了第二个内容类型,只使用了第一个。

所以最终我只需要在设置Content-Type的那部分代码中注释phpBB标头条目。