вложение почты php не работает с некоторыми клиентами - PullRequest
2 голосов
/ 25 января 2010

У меня есть веб-форма, которая позволяет нашим агентам загружать вложения в формате 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 <no-reply@hidden.com>\r\nReply-To: no-reply@hidden.com\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""))    

1 Ответ

0 голосов
/ 25 января 2010

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

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