PHPMailer 2文件相同的文件大小都没有发送

时间:2017-04-18 13:02:39

标签: php phpmailer

恰好我们有两个文件大小完全相同,我们有时会尝试一起发送。我们可以使用这些文件发送我们想要的任何其他内容,但只要我们包含它们,它就会发送第一个文件。我将包含我的phpmailer代码只是为了安全但它到目前为止工作。

    $mail = new PHPMailer(true);
    $mail->IsSendMail();
    $mail->SetFrom($from_addy, $from_name);
    foreach(explode(',',$to) as $address1){
        foreach(explode(';',$address1) as $address2){
            if($address2 != ''){
                $mail->AddAddress($address2);
            }
        }
    }

    $mail->WordWrap = 70;
    $mail->IsHTML(true);
    $mail->Subject = $subject;
    $mail->Body = $css.$message;
    $mail->AltBody = nl2br($message);
    $mail->MsgHTML($css.$message);
    if(is_array($attachments)){
        foreach($attachments as $attachment){
            $file = file_get_contents($attachment['tmp_name']);
            $mail->AddStringAttachment($file,$attachment['name']);
            // I have put checks here and both attachments do make it this far.
        }
    }

1 个答案:

答案 0 :(得分:1)

您没有检查addStringAttachment的返回值,因此您不知道它是否正常工作。 PHPMailer不会为所有内容抛出异常,并且在您请求它们时,您仍然无法捕获它们。为什么要阅读该文件并使用addStringAttachment - 为什么不直接使用addAttachment从文件中读取附件?当您需要附加远程API调用,PDF生成等结果时,字符串附件更有用。像这样:

if (!$mail->addAttachment($attachment['tmp_name'], $attachment['name'])) {
    echo "Failed to attach ".$attachment['tmp_name'];
}

您为什么使用isSendmail()?你不太可能需要它。

您没有提供任何证据表明它与文件大小有关 - 这并不是说附件是按其大小值或其他任何内容编制索引的。

您在调用AltBody之前设置了msgHTML(),这会覆盖AltBody。在nl2br()内容上调用AltBody毫无意义,因为AltBody通常会以纯文本形式显示,因此会显示<br>个标记。

看起来您的$attachment数组可能来自$_FILES,在这种情况下,它看起来您正在不安全地处理文件上传。阅读关于它的PHP文档,并查看PHPMailer提供的“发送文件上传”示例。

总的来说,看起来您的代码基于一个非常古老的PHPMailer示例,因此请确保您使用的是最新版本,并查看随其提供的示例。