使用S / MIME(PHP)发送带附件的电子邮件
发布时间:2020-12-13 17:10:33 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用 PHP附件发送加密电子邮件,但是,我的电子邮件只是在电子邮件客户端(在本例中为MS Outlook)中显示为纯文本. 这是我用来发送电子邮件的代码: $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $fileatt = "
我正在尝试使用
PHP附件发送加密电子邮件,但是,我的电子邮件只是在电子邮件客户端(在本例中为MS Outlook)中显示为纯文本.
这是我用来发送电子邮件的代码: $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $fileatt = "pathtoattachment"; $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.nn" . "--{$mime_boundary}n" . "Content-Type:text/html; charset="UTF-8"n" . "Content-Transfer-Encoding: 7bitnn Please find the file attachednn"; //file part $email_message .= "--{$mime_boundary}n" . "Content-Type: {$fileatt_type};n" . " name="{$fileatt_name}"n" . "Content-Transfer-Encoding: base64nn" . $data . "nn" . "--{$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("nn",$data,2); // Send mail $ok = mail($email_to,$email_subject,$parts[1],$parts[0]); } 该脚本有效,电子邮件已发送,可以在Outlook中解密,但结果如下: --==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-- 是否有其他方式发送带附件的加密电子邮件?或者这个问题有解决方案吗? 解决方法
此问题的解决方案是在包含消息的文件中包含原始消息的标头.
在将文件写入磁盘之前,我添加了类似的内容: foreach($headers as $headerkey => $headerval){ $email_message = $headerkey . ": " . $headerval . "rn" . $email_message; } 然后,在将数组传递给openssl_pkcs7_encrypt()函数之前,从数组中删除MIME-version和Content-Type标头. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |