PHP отправка писем с вложенными файлами - электронная почта вообще не отправляется

После попытки прочитать различные статьи об отправке электронных писем с вложениями в PHP (я использую в ASP с VBScript), я написал код ниже. К сожалению, это не работает вообще. Мало того, что оно не отправляет электронное письмо с приложением, оно, похоже, вообще не отправляется, хотя мой сценарий говорит, что оно отправлено. Где я ошибся? Я не использую форму для загрузки файла. Это статический скрипт.

<?php

$EmailTo = "[email protected]";
$EmailFrom = "[email protected]";
$EmailSubject = "The Email Subject";

$MailBoundary = md5(uniqid(time()));

$Headers = "To: ". $EmailTo . "\r\n";
$Headers .= "From: ". $EmailFrom . "\r\n";
$Headers = "MIME-Version: 1.0\r\n";
$Headers .= "Content-type: multipart/mixed;boundary=\"$MailBoundary \"";
$Headers .= "\r\n\r\n";
$Headers .= "This is a multi-part message in MIME format.";
$Headers .= "\r\n\r\n";

$FileAttachment = "AttachedFile.pdf";
$File = fopen($FileAttachment, "r");
$FileData = fread($File, filesize($FileAttachment));
$FileData = chunk_split(base64_encode($FileData));
$FileName = basename($FileAttachment);

$EmailBody = "--$MailBoundary\r\n";
$EmailBody .= "Content-type: text/html; charset=iso-8859-1\r\n";
$EmailBody .= "Content-transfer-encoding: 8bit\r\n\r\n";

$EmailBody .= "<html>" . chr(13) .
              "<head>" . chr(13) .
              "<style>" . chr(13) .
              ".breg {font-family:arial;font-size:10pt;color:#000000;padding:5px;}" . chr(13) .
              "</style>" . chr(13) .
              "</head>" . chr(13) .
              "<body>" . chr(13) .
              "<div class=" . chr(34) . "breg" . chr(34) . ">" . chr(13) .
              "The message text body goes here" . chr(13) .
              "</div>" . chr(13) .
              "</body>" . chr(13) .
              "</html>";

$EmailBody .= "--$MailBoundary\r\n";


$EmailBody .= "Content-type: " . mime_content_type($File) . "; name=$FileName\r\n";
$EmailBody .= "Content-transfer-encoding:base64\r\n\r\n";
$EmailBody .= $FileData. "\r\n\r\n";

$EmailBody .= " --$MailBoundary--";

if (mail($EmailTo, $EmailSubject, $EmailBody, $Headers))
{
 echo "Email to " . $EmailTo . " has been sent" . chr(13) . "<br />" . chr(13);
}
else
{
 echo "<b>Email to " . $EmailTo . " was not sent</b>" . chr(13) . "<br />" . chr(13);
}

?>
 Soren12 июн. 2012 г., 22:47
Да, я могу просто отправить основное электронное письмо. Итак, я знаю, что mail () работает
 user55784612 июн. 2012 г., 22:34
Я бы перестал пытаться с php mail () его очень слабым, взглянуть на phpmailer или другой calss
 Yang12 июн. 2012 г., 22:35
может быть, вам стоит использовать класс PHPMailer !? Google для этого
 andrewsi12 июн. 2012 г., 22:32
Вы пытались убрать все лишние вещи и просто отправить минимальное электронное письмо, чтобы убедиться, что почтовый звонок работает правильно? Если это работает, вы можете медленно добавлять функциональность обратно, пока не найдете часть, которая останавливает его работу.
 Soren12 июн. 2012 г., 22:53
Я понятия не имею, доступен ли PHPMailer на сервере, с которым я работаю.

Ответы на вопрос(2)

Решение Вопроса
For sending mail with attachment using php mail().Try this code:

<?php

 //If there is no error, send the email
 if(isset($_POST['ur_submit_button_name'])) {
  $EmailTo = "[email protected]";
  $EmailFrom = "[email protected]";
  $EmailSubject = "The Email Subject";


  $separator = md5(time());

  // carriage return type (we use a PHP end of line constant)
  $eol = PHP_EOL;

  // attachment name
  $filename = "ip.zip";//store that zip file in ur root directory
  $attachment = chunk_split(base64_encode(file_get_contents('ip.zip')));

  // main header
  $headers  = "From: ".$from.$eol;
  $headers .= "MIME-Version: 1.0".$eol; 
  $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";

  // no more headers after this, we start the body! //

  $body = "--".$separator.$eol;
  $body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
  $body .= "This is a MIME encoded message.".$eol;

  // message
  $body .= "--".$separator.$eol;
  $body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
  $body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  $body .= $message.$eol;

  // attachment
  $body .= "--".$separator.$eol;
  $body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
  $body .= "Content-Transfer-Encoding: base64".$eol;
  $body .= "Content-Disposition: attachment".$eol.$eol;
  $body .= $attachment.$eol;
  $body .= "--".$separator."--";

  // send message
  if (mail($to, $subject, $body, $headers)) {
  $mail_sent=true;
  echo "mail sent";
  } else {
  $mail_sent=false;
  echo "Error,Mail not sent";

 }
}

?>
 13 дек. 2017 г., 17:01
отличный! Это сработало для меня только после того, как я заметил твои двойные кавычки вокруг charset:"Content-Type:text/plain; charset=\"iso-8859-1\"".$eol
 15 июл. 2015 г., 10:44
Идеальный код работает как шарм
 05 июл. 2016 г., 11:38
почтой не высылать что мы должны делать.

сгенерируйте содержимое своей электронной почты с помощью функции imap_mail_compose:

mail('', 'message subject', '', imap_mail_compose(array header, array body)); 

Ваш ответ на вопрос