是否有另一种方法在PHP中发送电子邮件附件?

时间:2012-02-10 09:12:32

标签: php email-attachments

我在php文件中有一些代码通过电子邮件发送附件(由同一个php脚本生成的excel文件)。

每个经过测试的客户端--IOS(iphone 3gs,4,4s,ipad,ipad2),Android(Icecream Sandwich),Blackberry,Microsoft Outlook 2007(在XP上)读取电子邮件和附件绝对正常,但实际的人我们发送电子邮件以获取包含大量字符且没有附件的邮件。就好像他的电子邮件服务器(他在一个域上,因此不是像hotmail或gmail这样的已知电子邮件服务)无法解释发送的字节,并看到其中一些是附件。

我使用的代码片段如下......

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 个答案:

答案 0 :(得分:1)

有许多类文件内置了此功能,为什么要重新创建轮子?