hotmail没有收到图片附件内容

时间:2014-02-13 17:41:55

标签: email attachment mime hotmail

我正在尝试使用PHP通过AmazonSES发送带有图像附件的原始电子邮件。当我将电子邮件发送到Gmail帐户但Hotmail帐户正在接收空的附加图像时,它工作得很好。换句话说,hotmail似乎认识到有附件,这些附件具有我指定的正确名称,只是它们总是空的,大小为0字节。谷歌搜索没有帮助...提前谢谢!

$amazonSES = new AmazonSES();

// if (empty($attach)==0) {
    // $response = $amazonSES->send_email(AWS_SES_FROM_EMAIL,
        // array('ToAddresses' => array($to)),
        // array('Subject.Data' => $subject,'Body.Text.Data' => $messagein,)
    // );
// } else {
    $rstring = 'ajfas90lsjhntlen89y34oi598';

    $message= "To: ".$to."\n";
    $message.= "From: " . AWS_SES_FROM_EMAIL . "\n";
    $message.= "Subject: " . $subject . "\n";
    $message.= "MIME-Version: 1.0\n";
    $message.= 'Content-Type: multipart/mixed; boundary="ARandomString'.$rstring.'"';
    $message.= "\n\n";
    $message.= "--ARandomString$rstring\n";
    $message.= 'Content-Type: text/plain; charset="utf-8"';
    $message.= "\n";
    $message.= "Content-Transfer-Encoding: 7bit\n";
    $message.= "Content-Disposition: inline\n";
    $message.= "\n";
    $message.= $messagein;
    $message.= "\n\n";
    $message.= "--ARandomString$rstring\n";

    foreach ($attach as $attachment) {
        // $message.= "Content-ID: \<77987_SOME_WEIRD_TOKEN_BUT_UNIQUE_SO_SOMETIMES_A_@domain.com_IS_ADDED\>\n";
        $message.= "Content-ID: \<". md5(uniqid(rand(), true)) ."@biomechanico.com\>\n";
        $message.= 'Content-Type: application/zip; name="shell.zip"';
        $message.= "\n";
        $message.= "Content-Transfer-Encoding: base64\n";
        $message.= 'Content-Disposition: attachment; filename="' . $attachment["name"] . '"';
        $message.= "\n" . base64_encode(file_get_contents($attachment["file"])) . "\n";
        $message.= "--ARandomString$rstring\n";
    }

    $response = $amazonSES->send_raw_email(array(
                    'Data'=> base64_encode($message)),
                         array('Source'=>AWS_SES_FROM_EMAIL, 'Destinations'=> $to));

1 个答案:

答案 0 :(得分:2)

您正在制作格式不正确的消息。

考虑使用适当的库来生成邮件消息,而不是将它们从原始字符串拼接在一起。

否则,这就是我立刻注意到的。

  1. 最终的多部分边界必须由额外的--终止,即最后一行必须是:

    --ARandomStringajfas90lsjhntlen89y34oi598--

    而不是

    --ARandomStringajfas90lsjhntlen89y34oi598

  2. 在附件中,Content-Disposition标题行与正文之间没有空行。

  3. 消息行不得超过998个字符,但无论多长,Base64编码的附件数据总是在一行上。

  4. 据我了解PHP,附件部分中Content-ID的语法错误,因为它产生Content-ID: \<whatever\>但应生成Content-ID: <whatever>

    < / LI>
  5. 行必须由CR LF(\r\n)终止,但你有LF(\n)。

  6. 调试邮件问题的一种好方法是获取实际完整生成的邮件源($message)并通过Message Lint运行它。如果上述建议没有帮助,请发布生成的消息源而不是PHP代码。

    有关互联网邮件格式,请参阅RFC 5322。有关多部分邮件语法,请参阅RFC 2046