Заголовки почты PHP - PullRequest
       2

Заголовки почты PHP

1 голос
/ 11 апреля 2011

По сути, я пытаюсь прикрепить файл к электронному письму, которое я отправляю.Достаточно просто, верно?По тем или иным причинам ему не нравится следующий код (предположительно из-за заголовков).Может кто-нибудь помочь?

Заранее спасибо !!

$subject = "File ".date("Ymd");
$message = "NONE";
$filename = "test.csv";

$content = chunk_split(base64_encode(file_get_contents($filename)));
$uid = md5(uniqid(time()));
$name = basename($file);

$header .= "MIME-Version: 1.0\r\n";
$header .= "From: noreply@x.com\r\n";
$header .= "Reply-To: noreply@x.com\r\n";


$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: text/csv; name=\"".$filename."\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."\r\n";
//echo $header;

if (mail($to_email, $subject, $message, $header)) {
    echo "mail send ... OK"; 
} else {
    echo "mail send ... ERROR!";
}

И ошибка:

Предупреждение: mail () [function.mail]: неверные параметры для функции mail (), почта не отправлена.

Ответы [ 4 ]

7 голосов
/ 11 апреля 2011

Пожалуйста, пожалуйста, не создавайте свои собственные электронные письма MIME. Используйте PHPMailer или Swiftmailer , которые сделают почти все для вас. Вы можете заменить весь сценарий примерно на 5 или 6 строк кода.

И, что лучше всего, они дадут вам гораздо лучшие сообщения об ошибках / диагностику, чем когда-либо жалкая глупая функция mail().

1 голос
/ 11 апреля 2011

Если вы настаиваете на создании собственного заголовка, я бы предложил сделать это с помощью вашего выходного буфера - также я заметил, что вы не смогли закрыть границы вашего контента. Ниже показано, как я могу отредактировать часть вашего скрипта, генерирующую заголовки.

ob_start();

?>
MIME-Version: 1.0
From: noreply@x.com
Reply-To: noreply@x.com
Content-Type: multipart/mixed; boundary="<?php echo $uid; ?>"

This is a multi-part message in MIME format.
--<?php echo $uid; ?>
Content-Type:text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

<?php echo $message; ?>

--<?php echo $uid; ?>--
--<?php echo $uid; ?>
Content-Type: text/csv; name="<?php echo $filename; ?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="<?php echo $filename; ?>"

<?php echo $content; ?>

--<?php echo $uid; ?>--
<?php

$header = trim(ob_get_clean());
0 голосов
/ 11 апреля 2011

Вы, кажется, не заполняете адрес назначения (в примере кода), и у вас есть ваше сообщение как в заголовках (которые определенно простираются дальше заголовков), так и в теле ...

0 голосов
/ 11 апреля 2011

PHP-библиотека Geekmail позволяет легко добавлять вложения в электронные письма (и вообще отправлять электронные письма):

$geekMail = new geekMail();
$geekMail->setMailType('text');
$geekMail->from("noreply@x.com");
$geekMail->to($to_email);
$geekMail->subject($subject);
$geekMail->message($message);
$geekMail->attach($filename);
if (!$geekMail->send()){
  //an error occurred sending the email
  $errors = $geekMail->getDebugger();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...