Проблема отправки электронной почты с цифровой подписью в Gmail с php

Я пытаюсь отправить сообщения электронной почты с цифровой подписью через PHPBB. У меня он работает хорошо для всех наших электронных писем по обмену и для всех различных клиентов, но он не работает для пользователей Gmail. Похоже, что Google не обрабатывает / не читает MIME-тип из нескольких частей. Может быть, мне не хватает чего-то глупого или простого? Спасибо за внимание!

Вот пример тестового электронного письма, сертификат заблокирован с помощью #:

Это подписанное сообщение S/MIME

------############################ Content-Type: text/html; кодировка ="ISO-8859-1"

Content-Transfer-Encoding: 8 бит

Привет админ,

Поздравляю. Если вы получили это письмо, phpBB правильно настроен для отправки писем.

Если вам требуется помощь, посетите форумы поддержки phpBB - https://www.phpbb.com/community/

-

------ ############################ Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: вложение; имя файла ="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 ответ

Ну, это была простая вещь! Заголовки обмена не совпадали с тем, что было у меня в обработанном файле signature.txt. Я покопался в ней и обнаружил, что система phpBB создает заголовок, включая Content-Type: text/html; charset=charset="iso-8859-1". Таким образом, заголовок имел два, один и правильный "Content-Type: multipart/signature; Протокол = "применение / х-PKCS7-подпись"; micalg="sha-256";” Exchange изменяет заголовки и просто игнорирует / очищает первую запись, в то время как Google игнорирует второй тип контента и просто использует первый.

В конечном счете, мне просто нужно было закомментировать запись заголовка phpBB в той части кода, которая устанавливает Content-Type.

Другие вопросы по тегам