Вложение PHPmail не достигает Gmail + ошибки форматирования - PullRequest
1 голос
/ 30 сентября 2019

Я использую скрипт 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.";
}
?>

Что можно изменить, чтобы сделать доставку с вложением для всех почтовых ящиков?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...