【问题标题】:How to Specify File Type and Size Limits With PHPMailer Mailing Multiple Attachments如何使用 PHPMailer 邮件多个附件指定文件类型和大小限制
【发布时间】:2022-01-08 06:53:12
【问题描述】:

有人可以使用PHPMailer 告诉我如何指定附件大小和类型的限制吗?

例如,如果我想启用仅附加 PDF 文件且大小有限,如何更新这部分代码?

foreach ($_FILES["attachment"]["name"] as $k => $v) {
    $mail->AddAttachment( $_FILES["attachment"]["tmp_name"][$k], $_FILES["attachment"]["name"][$k] );
}

这是完整的代码

<?php
require('phpmailer/class.phpmailer.php');

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;
    $mail->SMTPAuth = TRUE;
    $mail->SMTPSecure = "ssl";
    $mail->Port     = 465;  
    $mail->Username = "YOUR USER_NAME";
    $mail->Password = "YOUR PASSWORD";
    $mail->Host     = "YOUR HOST";
    $mail->Mailer   = "smtp";
    $mail->SetFrom($_POST["userEmail"], $_POST["userName"]);
    $mail->AddReplyTo($_POST["userEmail"], $_POST["userName"]);
    $mail->AddAddress("RECIPIENT_EMAIL");   
    $mail->Subject = $_POST["subject"];
    $mail->WordWrap   = 80;
    $mail->MsgHTML($_POST["content"]);
    
    foreach ($_FILES["attachment"]["name"] as $k => $v) {
        $mail->AddAttachment( $_FILES["attachment"]["tmp_name"][$k], $_FILES["attachment"]["name"][$k] );
    }
    
    $mail->IsHTML(true);
if(!$mail->Send()) {
    echo "<p class='error'>Problem in Sending Mail.</p>";
} else {
    echo "<p class='success'>Mail Sent Successfully.</p>";
}   
?>

【问题讨论】:

    标签: phpmailer


    【解决方案1】:

    这不是 PHPMailer 的责任 - 由您来控制文件的大小和类型它到达 PHPMailer。

    首先,您使用的是非常旧且不受支持的 PHPMailer 版本,因此请升级到the latest version

    其次,您对上传的处理是不安全的。关注the PHPMailer file upload example,了解如何安全操作。

    在您的表单中,设置一个名为 MAX_FILE_SIZE 的隐藏字段在您的 file 输入之前,设置为您想要施加的任何最大尺寸:

    <input type="hidden" name="MAX_FILE_SIZE" value="123456">
    

    这实际上并不能控制提交的大小,但按照惯例,浏览器会使用它在提交之前拒绝过大的文件,从而为用户节省大量麻烦。

    验证您正在查看的 $_FILES 元素(如示例中的 move_uploaded_file)后,通过查看 size 元素来查看提交文件的大小:

    if ($_FILES['attachment']['size'] <= 123456) {
        //We know file is under our size limit
    

    要检查文件类型,请从提供的文件名中提取扩展名:

    if (pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION) === 'pdf')) {
        //We know file has a `.pdf` extension
    

    为了更好地衡量,您还可以检查提供的文件类型是否也是我们想要的:

    if ($_FILES['userfile']['type'] === 'application/pdf')) {
        //We know file has a PDF MIME type
    

    检查完所有这些之后,您现在可以安全地将经过验证的文件传递给 PHPMailer:

    $mail->addAttachment($uploadedFilePath);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2010-09-16
      相关资源
      最近更新 更多