PHP Mailer不会在move_uploaded_file之后发送电子邮件

时间:2018-04-10 07:58:41

标签: php file-upload phpmailer

我有以下代码来保存附件并通过电子邮件发送(PHP Mailer)。

    $filedata['name'] = $_FILES['userfile']['name'][$i];    
    $path = "files/".md5($i.$filedata['name'].time()).".".pathinfo($_FILES['userfile']['name'][$i], PATHINFO_EXTENSION);

    move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path);

    $mail->AddAttachment( $path, $filedata['name']);

问题是,邮件有时并非总是在没有附件的情况下发送(但是,文件已上传)。我想,问题发生在move_uploaded_file,因为电子邮件是在文件移动之前发送的

是否会使用某种回调?

3 个答案:

答案 0 :(得分:1)

if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)){

    $mail->AddAttachment( $path, $filedata['name']);

}

你可以使用它。

答案 1 :(得分:1)

您需要先检查附件是否成功上传

if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)) {
    $mail->AddAttachment($path, $filedata['name']);
}
else {
    echo "Upload failed";
}

编辑:

或者您可以尝试捕捉错误

try {

    /*
     *
     * Your mail code here
     * ..........
     */

    move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path);
    $mail->AddAttachment($path, $filedata['name']);
    $mail->Send();
} catch (phpmailerException $e) {
    echo $e->errorMessage(); // Error messages from PHPMailer
} catch (Exception $e) {
    echo $e->getMessage(); // Error messages from anything else!
}

答案 2 :(得分:0)

将邮件功能放在if条件中:

 if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $path)){

    $mail->AddAttachment( $path, $filedata['name']);
}

在发送邮件之前,我们应先检查是否已上传。