PHP mail() - HTML появляется как вложение после добавления вложения файла
Наконец-то удалось избавиться от всех ошибок, и теперь они сказали: "О, нам нужно добавить вложения...". Итак, это отправляет html-сообщение с версией в виде открытого текста и делает просто набухание. Теперь, когда у меня есть вложения, прибывающие почтовые клиенты показывают версию встроенного открытого текста и версию html как другое вложение, а затем, казалось бы, пустой 93-байтовый файл с именем, например, ATT00248.txt.
Кто-нибудь может ударить меня по голове сзади или сказать, где я иду не так? Я хочу встроенный HTML-код, где он доступен в пользовательском интерфейсе почты, текстовая версия, где HTML-код недоступен, и одно вложение в качестве вложения.
Любая помощь?
<?php
$template = $_SERVER['DOCUMENT_ROOT'] . '/leads/templates/'.$_SESSION['templateFile'];
ob_start();
include($template);
$html = ob_get_contents();
ob_end_clean();
if (strlen($html) == 0) {
echo "The template at $template did not load.";
exit;
}
$email = $_SESSION['user']->email;
$name = $_SESSION['user']->first_name . ' ' . $_SESSION['user']->last_name;
$from = "$name <$email>";
$subject = unslash($_SESSION['subject']);
$TextMessage = strip_tags(unslash($_SESSION['message']));
$notice_text = "This is a multi-part message in MIME format.";
$plain_text = str_replace(' ',' ', $TextMessage);
if ($_SESSION['attachment']) {
$fileatt = 'files/' . $_SESSION['attachment'];
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$data = chunk_split(base64_encode($data));
$mailtype = 'mixed';
$fileatt_type = "application/octet-stream";
$fileatt_name = $_SESSION['attachment'];
} else {
$mailtype = 'alternative';
}
$semi_rand = md5(time());
$mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand";
$mime_boundary_header = chr(34) . $mime_boundary . chr(34);
$body = "$notice_text
--$mime_boundary
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
$plain_text
--$mime_boundary
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
$html
--$mime_boundary
";
$body .= "Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
"Content-Disposition: attachment;\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--$mime_boundary\n";
// #1 //
if ($to = $_SESSION['recipients'][0]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// #2 //
if ($to = $_SESSION['recipients'][1]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// #3 //
if ($to = $_SESSION['recipients'][2]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// #4 //
if ($to = $_SESSION['recipients'][3]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// #5 //
if ($to = $_SESSION['recipients'][4]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// CC self? //
if ($_SESSION['cc_me']) {
mail($from, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($from) . ".<br />";
}
if ($fileatt) {
unlink($fileatt);
}
echo "<a href='email_start.php'>Click here</a> to send another email.";
list($_SESSION['email'], $_SESSION['subject'], $_SESSION['bullets'], $_SESSION['message'],
$_SESSION['templateFile'], $_SESSION['template'], $_SESSION['cc_me'], $_SESSION['recipients']) = '';
?>
2 ответа
Пекка был прав: использовать Swiftmailer было просто и надежно. http://swiftmailer.org/
Я бы опубликовал это как комментарий, но это слишком долго.
// #1 //
if ($to = $_SESSION['recipients'][0]) {
mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header);
echo "Email sent to " . htmlentities($to) . ".<br />";
}
// #2 ... #3 ... #4 ... #5
Завершит выполнение всех блоков, так как ($to = $_SESSION['recipients'][0])
всегда будет правдой Он также будет отображать "Электронная почта отправлена ...", даже когда mail()
выходит из строя.
То, что вы хотите, это:
if (in_array($to, $_SESSION['recipients'])) {
if (mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header)) {
echo "Email sent to " . htmlentities($to) . ".<br />";
}
}
Или, если вы действительно хотите всем по почте, или
foreach ($_SESSION['recipients'] as $to ) {
if (mail($to, $subject, $body,
"From: " . $from . "\n" .
"MIME-Version: 1.0\n" .
"Content-Type: multipart/$mailtype;\n" .
" boundary=" . $mime_boundary_header)) {
echo "Email sent to " . htmlentities($to) . ".<br />";
}
}