Почтовое вложение php не работает с некоторыми клиентами

У меня есть веб-форма, которая позволяет нашим агентам загружать вложение в формате PDF, которое позже отправляется по электронной почте нашему клиенту. Код, который я использую для создания электронной почты, я нашел на веб-сайте, и до недавнего времени он работал хорошо. Кажется, что с некоторыми (всего несколькими, например, gmail) почтовыми клиентами вложение распечатывается в теле письма, а не интерпретируется как вложение. Однако он работает почти со всеми клиентами, которые мы пробовали, за исключением нескольких. Любое решение того, почему это может произойти, было бы очень признательно, поскольку я мало что знаю об этом.

if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
return;
}
if ($_FILES["file"]["type"] != "application/pdf")
{
echo "<center>Attachment has to be valid .pdf<br><a href='../index.php'>Tillbaka</a></center>";
return; 
}
$file = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
/*
striped out some parts about how the body is constructed
note that there are no comment fields here in the real version of this sourcecode.
*/  

$msg = "msg here.." //i striped this part out as there's nothing odd about how the body is constructed its plain text

$random_hash = md5(date('r', time())); 

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="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<?php echo $msg;?>

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?>  
Content-Type: application/pdf; name="<?php echo $_FILES["file"]["name"];?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment

<?php echo $file;?>

--PHP-mixed-<?php echo $random_hash; ?>-- 
    <?php    
$message = ob_get_clean();     
//I removed some info about recievers, reply-to, from etc..
mail($hidden_variable, "hidden subject", $message, "From:Hidden Name <[email protected]>\r\nReply-To: [email protected]\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""))    

person Jonas B    schedule 25.01.2010    source источник


Ответы (1)


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

person Sqoo    schedule 25.01.2010
comment
Привет, да, я начинаю понимать. Однако проблема в том, что все проходит через нашу интрасеть. Веб-приложение предназначено только для использования нашим персоналом службы поддержки по отношению к нашим клиентам, и мы не можем размещать PDF-файлы для загрузки, и мы не должны этого делать, поскольку мы являемся только посредником между нашим надсмотрщиком и их клиентами. Но если я прямо сейчас открою свой почтовый клиент и отправлю электронное письмо на gmail с вложением в формате pdf, все будет работать нормально. Так что что-то должно быть не так с тем, как я строю свою электронную почту, что-то в заголовках контента и т. д., что не нравится некоторым почтовым клиентам. - person Jonas B; 25.01.2010
comment
Одна вещь, которую вы можете сделать, это сравнить заголовки в обоих электронных письмах. - person Sqoo; 25.01.2010