У меня есть некоторый код в php-файле, который отправляет вложение (файл excel, созданный тем же php-скриптом) по электронной почте.
Каждый проверенный клиент - IOS (iphone 3gs, 4, 4s,ipad, ipad2), Android (Icecream Sandwich), Blackberry, Microsoft Outlook 2007 (на XP) считывает электронную почту и вложение абсолютно нормально, но реальный человек, которому мы отправляем электронное письмо, получает сообщение с большим количеством символов и без вложений.Как будто его почтовый сервер (он находится в домене, поэтому не известная служба электронной почты, такая как hotmail или gmail) не может интерпретировать отправленные байты и видит, что часть из них является вложением.
Фрагмент кода Iиспользуется следующим образом ...
function email($recipients,$filename,$subject,$cc,$bcc){
$to = $recipients;
$subject = "EWS-".$subject;
$random_hash = md5(date('r', time()));
if($cc <> ""){
$header_cc = "\r\nCc: ".$cc;
}else{
$header_cc = "";
}
if($bcc <> ""){
$header_bcc = "\r\nBcc: ".$bcc;
}else{
$header_bcc = "";
}
$headers = "From: info@ourcompany.com\r\nReply-To: info@ourcompany.com". $header_cc . $header_bcc;
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$attachment = chunk_split(base64_encode(file_get_contents($filename)));
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-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/excel; name="<?php echo $filename ?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();
$mail_sent = @mail( $to, $subject, $message, $headers );
return $mail_sent ? "Mail sent" : "Mail failed";
}
Клиент получает электронное письмо, подобное этому (оно было переслано нам, поэтому я просматриваю его в Outlook) ...
Это отказ от ответственности, который портит это?(Если так, как работают мои тесты? Некоторые из них используют внешние адреса электронной почты, такие как @ me.com @ gmail.com @ manx.net)
Что-то не так с кодомчто может вызвать это?
Есть ли альтернативный способ отправки писем с использованием PHP, который с большей вероятностью будет работать?