Вопрос по php, email, email-attachments, attachment – PHP отправка писем с вложенными файлами - электронная почта вообще не отправляется

2

После попытки прочитать различные статьи об отправке электронных писем с вложениями в 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);
}

?>
Я бы перестал пытаться с php mail () его очень слабым, взглянуть на phpmailer или другой calss user557846
Я понятия не имею, доступен ли PHPMailer на сервере, с которым я работаю. Soren
Вы пытались убрать все лишние вещи и просто отправить минимальное электронное письмо, чтобы убедиться, что почтовый звонок работает правильно? Если это работает, вы можете медленно добавлять функциональность обратно, пока не найдете часть, которая останавливает его работу. andrewsi
Да, я могу просто отправить основное электронное письмо. Итак, я знаю, что mail () работает Soren
может быть, вам стоит использовать класс PHPMailer !? Google для этого Yang

Ваш Ответ

2   ответа
0

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

mail('', 'message subject', '', imap_mail_compose(array header, array body)); 
10
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";

 }
}

?>
отличный! Это сработало для меня только после того, как я заметил твои двойные кавычки вокруг charset:"Content-Type:text/plain; charset=\"iso-8859-1\"".$eol
Идеальный код работает как шарм
почтой не высылать что мы должны делать.

Похожие вопросы