Есть ли альтернативный способ отправки вложений электронной почты в php? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть некоторый код в 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) ...

Sample of what is being received by the recipient

  • Это отказ от ответственности, который портит это?(Если так, как работают мои тесты? Некоторые из них используют внешние адреса электронной почты, такие как @ me.com @ gmail.com @ manx.net)

  • Что-то не так с кодомчто может вызвать это?

  • Есть ли альтернативный способ отправки писем с использованием PHP, который с большей вероятностью будет работать?

1 Ответ

1 голос
/ 10 февраля 2012

Есть много файлов классов, в которые встроена эта функциональность, зачем заново создавать колесо?

...