恰好我们有两个文件大小完全相同,我们有时会尝试一起发送。我们可以使用这些文件发送我们想要的任何其他内容,但只要我们包含它们,它就会发送第一个文件。我将包含我的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.
}
}
答案 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示例,因此请确保您使用的是最新版本,并查看随其提供的示例。