Sending an Email Message Using the S / MIME Application (PHP)

I am trying to send an encrypted email with an attachment with PHP, however, my email is simply duplicated as plain text in an email client (in this case, MS Outlook). This is the code I use to send email:

$semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $fileatt = "\path\to\attachment"; $headers = array(); $headers['From'] = $email_from; $headers['Subject'] = $email_subject; $headers['MIME-Version'] = "1.0"; $headers['Content-Type'] = "multipart/mixed; boundary=\"{$mime_boundary}\""; $file = fopen($fileatt,'rb'); $data = fread($file,filesize($fileatt)); $data = chunk_split(base64_encode($data)); fclose($file); //message part $email_message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n Please find the file attached\n\n"; //file part $email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n" . "--{$mime_boundary}--\n"; $mfile = fopen("msg.txt", "w"); fwrite($mfile, $email_message); fclose($mfile); $key = file_get_contents("mailcert.cer"); $encrypt = openssl_pkcs7_encrypt("msg.txt", "enc.txt", $key, $headers); if($encrypt){ $data = file_get_contents("enc.txt"); $parts = explode("\n\n", $data, 2); // Send mail $ok = mail($email_to, $email_subject, $parts[1], $parts[0]); } 

The script works, the email is delivered and decrypted in Outlook, however the result looks something like this:

 --==Multipart_Boundary_x6434b5a09f1f49c571a633802cd36772x Content-Type:text/html; charset="UTF-8" Content-Transfer-Encoding: 7bit Please find the file attached --==Multipart_Boundary_x6434b5a09f1f49c571a633802cd36772x Content-Type: application/octet-stream; name="1327490599scrippie.txt" Content-Transfer-Encoding: base64 JG9sZElwID0gIjE5NS40Ni4zOS43MyINCiRuZXdJcCA9ICIqIg0KDQojIEdldCBhbGwgb2JqZWN0 cyBhdCBJSVM6Ly9Mb2NhbGhvc3QvVzNTVkMNCiRpaXNPYmplY3RzID0gbmV3LW9iamVjdCBgDQog ICAgU3lzdGVtLkRpcmVjdG9yeVNlcnZpY2VzLkRpcmVjdG9yeUVudHJ5KCJJSVM6Ly9Mb2NhbGhv [etc....] --==Multipart_Boundary_x6434b5a09f1f49c571a633802cd36772x-- 

Is there any other way to send encrypted emails with attachments? Or is there a solution to this problem?

+4
source share
1 answer

The solution to this problem is to include the headers of the original message in the file containing the message.

I added something like this before writing the file to disk:

 foreach($headers as $headerkey => $headerval){ $email_message = $headerkey . ": " . $headerval . "\r\n" . $email_message; } 

Then remove the headers of the MIME version and the Content-Type from the array before passing it to the openssl_pkcs7_encrypt() function.

+4
source

Source: https://habr.com/ru/post/1392950/


All Articles