По существу, что я пытаюсь сделать, это прикрепить файл к электронной почте, которую я отправляю. Достаточно просто, не так ли? По той или иной причине ему не нравится следующий код (предположительно из-за заголовков). Может ли кто-нибудь помочь?
Заранее спасибо!!
$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 (), почта не отправлена.
Пожалуйста, пожалуйста, не создавайте свои собственные электронные письма MIME. Используйте PHPMailer или Swiftmailer , которые делают почти все для вас. Вы можете заменить весь скрипт примерно на 5 или 6 строк кода.
И, самое главное, они дадут вам гораздо более эффективные сообщения об ошибках / диагностику, чем когда-либо будет жалкая глупая функция mail()
.
Если вы настаиваете на создании собственного заголовка, я бы предложил сделать это с помощью вашего выходного буфера – также я заметил, что вы не смогли закрыть границы своего контента. Вставка ниже – как отредактировать заголовок, генерирующий часть вашего скрипта.
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());
Библиотека Geekmail PHP позволяет легко добавлять вложения в электронные письма (и отправлять электронные письма в целом):
$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(); }
Кажется, вы не заполняете адрес назначения (в примере кода), и у вас есть ваше сообщение как в заголовках (которые определенно простираются дальше заголовков), так и в теле …