PHP - отправка электронной почты с вложением не отображает содержимое сообщения
Пытаюсь создать скрипт, в котором я мог бы отправлять электронное письмо с вложениями. Все работает хорошо, за исключением того, что, когда я не добавляю файл в электронное письмо, я все равно вижу вложение с 0B и без имени.
if(isset($_POST["my_send"])){
$email_to = $_POST['my_email_to']; //required
$email_from = "[email protected]"; // required
$subject = $_POST['my_subject']; // not required
$comments = $_POST['write_my_email']; // required
$email_message .= stripcslashes("$comments");
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
$filename = $_FILES['file']['name'];
// create email headers
$headers = 'From: '.$email_from."\r\n".
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"_1_$boundary\"\r\n";
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
$message="This is a multi-part message in MIME format.
--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"
--_2_$boundary
Content-Type: text/plain; charset=\"iso-8859-1\"
Content-Transfer-Encoding: 7bit
$email_message
--_2_$boundary--
--_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$attachment
--_1_$boundary--";
mail($email_to, $subject, $message, $headers);
echo "<h5>Thanks, your email was sent successfully!</h5>";
}
Что я делаю не так? Какой-нибудь совет?
3 answers
Просто исключите это, когда нет вложения:
--_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$attachment
--_1_$boundary--
Например, только добавляя его к $message
, когда имя файла не пустое:
$message = "This is a multi-part message in MIME format.
--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"
--_2_$boundary
Content-Type: text/plain; charset=\"iso-8859-1\"
Content-Transfer-Encoding: 7bit
$email_message";
if (!empty($filename))
{
$message .= " --_1_$boundary
Content-Type: application/octet-stream; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$attachment
--_1_$boundary--";
}
$headers = array();
$headers [] = 'MIME-Version: 1.0';
$headers [] = 'Content-type: text/html; charset=utf-8';
$headers [] = 'Reply-To: ' . $From;
$headers [] = 'X-Mailer: PHP/' . phpversion();
$headers [] = "Return-Path: " . $From;
$headers [] = "Errors-To: " . $From;
$header = implode("\r\n", $headers);
$fifth = "-f $From";
if (mail($empfaenger, $betreff, $Mailbody, $header, $fifth)) {};
Я думаю, что последний заголовок не должен заканчиваться на "\r\n". Этот код написан кем-то, кто опубликовал его в руководстве. проверьте руководство, вы найдете там хороший код.
Если вы хотите отправлять электронные письма с вложениями, я рекомендую вам использовать библиотеку PHP-Mailer
. Это сделает вашу жизнь намного проще.
Все, что вам нужно сделать, это включить класс и создать экземпляр PHPMailer Object
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
//And you will need to set properties for the object
?>
Проверьте эту Ссылку на Github PHP-почтовой программы . Они также привели простой пример того, как реализовать