Email hotmail未接收图像附件内容

Email hotmail未接收图像附件内容,email,attachment,mime,hotmail,Email,Attachment,Mime,Hotmail,我正在尝试使用PHP通过Amazons发送带有图像附件的原始电子邮件。当我将电子邮件发送到gmail帐户时效果很好,但是hotmail帐户收到的是空的附加图像。换句话说,hotmail似乎认识到存在附件,并且这些附件具有我指定的正确名称,只是它们总是空的,大小为0字节。谷歌搜索没有帮助。。。提前谢谢 $amazonSES = new AmazonSES(); // if (empty($attach)==0) { // $response = $amazonSES->send_e

我正在尝试使用PHP通过Amazons发送带有图像附件的原始电子邮件。当我将电子邮件发送到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));
$amazonSES=新amazonSES();
//如果(空($attach)=0){
//$response=$amazonSES->send_email(AWS_SES_FROM_email,
//数组('toaddress'=>array($to)),
//数组('Subject.Data'=>$Subject,'Body.Text.Data'=>$messagein,)
// );
//}其他{
$rstring='ajfas90lsjhntlen89y34oi598';
$message=“To:”.$To.“\n”;
$message.=“发件人:”.AWS\u SES\u From\u EMAIL.“\n”;
$message.=“主题:”.$Subject.\n”;
$message.=“MIME版本:1.0\n”;
$message.='Content Type:multipart/mixed;boundary=“ARandomString”。$rstring.'”;
$message.=“\n\n”;
$message.=“--ARandomString$rstring\n”;
$message.=“内容类型:text/plain;charset=“utf-8”;
$message.=“\n”;
$message.=“内容传输编码:7bit\n”;
$message.=“内容配置:内联\n”;
$message.=“\n”;
$message.=$messagein;
$message.=“\n\n”;
$message.=“--ARandomString$rstring\n”;
foreach($attached as$attachment){
//$message.=“内容ID:\\n”;
$message.=“内容ID:\\n”;
$message.=“内容类型:application/zip;name=“shell.zip””;
$message.=“\n”;
$message.=“内容传输编码:base64\n”;
$message.='Content-Disposition:attachment;filename=“”。$attachment[“name”].';
$message.=“\n”.base64\u编码(文件获取内容($attachment[“file”])。“\n”;
$message.=“--ARandomString$rstring\n”;
}
$response=$amazonSES->send_raw_email(数组)(
“数据”=>base64_编码($message)),
数组('Source'=>AWS_SES_FROM_EMAIL,'Destinations'=>$to));

您正在生成格式不正确的消息

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

否则,我马上就会注意到

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

    --ARandomStringajfas90lsjhntlen89y34oi598--

    而不是

    -ARandomStringajfas90lsjhntlen89y34oi598

  • 在附件部分中,
    内容处置
    标题行和正文之间没有空行

  • 消息行的长度不得超过998个字符,但Base64编码的附件数据无论多长,始终在一行上

  • 就我对PHP的理解而言,附件部分中
    内容ID
    的语法是错误的,因为它产生
    内容ID:\
    ,但应该产生
    内容ID:

  • 行必须由CR LF(
    \r\n
    )终止,但您有LF(
    \n

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


    有关Internet邮件格式,请参阅。有关多部分邮件语法,请参阅。

    这些解决了我的问题。谢谢。我尝试使用PHPmailer,但不知道如何使其与Amazons一起工作。谢谢again@nbunderson您可能需要调用类似的函数,并将结果字符串分配给
    $message