Я использую скрипт phpmail для отправки вложений с сайта на электронную почту. Сам скрипт работает. Я заметил, что, например, в случае Gmail приходят сообщения, но без вложений. Вместо этого, в дополнение к содержимому, существует очень длинное сообщение, содержащее только строку хеш-функции.
Кроме того, не все почтовые ящики отображают содержимое правильно. В некоторых случаях контент также добавляет, например:
- PHP-alt-41babb7e7ab4c64e3af6ea533924bebdContent-Type: text / plain;charset = "UTF-8" Content-Transfer-Encoding: 7bit
и html-кодировка в виде простого текста.
Можно ли его стандартизировать, чтобы не отображать ненужную информацию?
Вот мой код:
<?php
$to = $_POST['email'];
$subject = 'Attachment from site domain.com';
$subject = sprintf("=?utf-8?B?%s?=", base64_encode($subject));
$random_hash = md5(uniqid(time()));
$headers = "From: MySite <site@domain.com>\r\nReply-To: site@domain.com";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$filename = $_POST['file_id'] . ".pdf";
$path = "/home/ftp/wp-content/uploads";
$file = $path . "/" . $filename;
// read file into $data var
$f = fopen($file, "rb");
$data = fread($f, filesize( $file ) );
fclose($f);
$attachment = chunk_split(base64_encode($data));
ob_start();
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Hello,
Here the mail text.
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
<h2>Hello,</h2>
<p>Here's the mail text</p>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Transfer-Encoding: base64
Content-Type: application/pdf; name="<?php echo $filename; ?>"
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();
if (@mail($to, $subject, $message, $headers )) {
echo "<p><b>File send!</b></p> Check your e-mail.";
} else {
echo "<p><b>Error!</b></p> File not send.";
}
?>
Что можно изменить, чтобы сделать доставку с вложением для всех почтовых ящиков?