Проблема отправки электронных писем с цифровой подписью в Gmail с php - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь отправить сообщения электронной почты с цифровой подписью через 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: применение / х-PKCS7-подпись; 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 Ответ

0 голосов
/ 17 мая 2018

Ну, это было просто! Заголовки обмена не совпадали с тем, что было у меня в обработанном файле 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.

...