亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHPMailer拒絕發送沒有附件的電子郵件

PHPMailer拒絕發送沒有附件的電子郵件

PHP
一只斗牛犬 2021-11-26 19:18:22
我正在使用 PHPMailer 發送帶有可選附件文件的電子郵件。當發送帶有附件的電子郵件存在時,這工作正常。但問題是當附件為空時,PHPmailer 拒絕發送電子郵件,有什么解決辦法嗎?<?phpuse PHPMailer\PHPMailer\PHPMailer;$msg = '';$sender_name =  $_POST['sender_name'];// Upload handled successfully// Now create a messagerequire 'vendor/autoload.php';$mail = new PHPMailer;$mail->setFrom('info@*****.com', 'first last');$mail->addAddress('info@*****.com');$mail->Subject = 'PHPMailer file sender';$mail->Body = "Contact form submission:\n" . "Name: $sender_name\n";if (array_key_exists('userfile', $_FILES)) {    // First handle the upload    // Don't trust provided filename - same goes for MIME types    // See http://php.net/manual/en/features.file-upload.php#114004 for more thorough upload validation    $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {        // Attach the uploaded file        //$mail->addAttachment($uploadfile, 'My uploaded file');        $name = $_FILES['userfile']['name'];        $ext = end((explode(".", $name)));        $mail->addAttachment($uploadfile, 'You Have Attachment.'.$ext);    } else {        $msg .= 'Failed to move file to ' . $uploadfile;    }}if (!$mail->send()) {    $msg .= "Mailer Error: " . $mail->ErrorInfo;} else {    $msg .= "Message sent!";}?>這是位于 PHP 代碼下的 html 女巫:<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>PHPMailer Upload</title></head><body><?php if (empty($msg)) { ?>    <form method="post" enctype="multipart/form-data">        <input type="hidden" name="MAX_FILE_SIZE" value="1000000">        <br>        <input type="text" name="sender_name">        <br>        Send this file: <input name="userfile" type="file">        <br>        <input type="submit" value="Send File">    </form><?php } else {    echo $msg;} ?></body></html>
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

我會重寫它,變成這樣:


    // Now create a message

    require 'vendor/autoload.php';

    //$mail->AllowEmpty = true;

    $mail = new PHPMailer;

    $mail->setFrom('info@*****.com', 'first last');

    $mail->addAddress('info@*****.com');

    $mail->Subject = 'PHPMailer file sender';

    $mail->Body = "Contact form submission:\n" . "Name: $sender_name\n";


    if (array_key_exists('userfile', $_FILES) && $_FILES["userfile"]["error"] == UPLOAD_ERR_OK) {

        // First handle the upload

        // Don't trust provided filename - same goes for MIME types

        // See http://php.net/manual/en/features.file-upload.php#114004 for more thorough upload validation

        $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));

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

            // Upload handled successfully

            // Attach the uploaded file

            //$mail->addAttachment($uploadfile, 'My uploaded file');


            $name = $_FILES['userfile']['name'];

            $ext = end((explode(".", $name)));

            $mail->addAttachment($uploadfile, 'You Have Attachment.'.$ext);

        } else {

            $msg .= 'Failed to move file to ' . $uploadfile;

        }

    }


    if (!$mail->send()) {

        $msg .= "Mailer Error: " . $mail->ErrorInfo;

    } else {

        $msg .= "Message sent!";

    }

這樣它將發送電子郵件,如果有文件附件,它將被包含在內。


查看完整回答
反對 回復 2021-11-26
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

它以這種方式工作,現在它正在發送帶/不帶附件的電子郵件,我還將發件人姓名和電子郵件等許多內容更改為變量和正文內容?,F在我沒有收到任何 PHP 錯誤,并且表單按照我的意愿完美運行,我希望這會對某人有所幫助,謝謝大家。


<?php


use PHPMailer\PHPMailer\PHPMailer;


$msg = '';

if (array_key_exists('userfile', $_FILES)) {

    require 'vendor/autoload.php';

    // Create a message

    $mail = new PHPMailer;

    $mail->SetFrom($_POST['email'], $_POST['sender_name']); //altered

    $mail->addAddress('info@***.com');

    $mail->Subject = 'Service Request';

    $mail->Body = "Sender: " .$_POST['sender_name'] ."\n" ."Phone: " .$_POST['phone']; //altered

    //Attach multiple files one by one

    for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {

     $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name'][$ct]));

     $filename = $_FILES['userfile']['name'][$ct];

       if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {

          $mail->addAttachment($uploadfile, $filename);

        } 

    }

    if (!$mail->send()) {

        $msg .= "Mailer Error: " . $mail->ErrorInfo;

    } else {

        $msg .= "Message sent!";

    }

}

?>


查看完整回答
反對 回復 2021-11-26
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

完成實際發送的整個腳本取決于是否有文件是或否的事實。這是由腳本頂部的 if 語句處理的。我建議在始終發送電子郵件的地方進行編輯,并且只有在有文件是或否時才會添加文件。但由于我在移動設備上,我不知道編輯建議是否通過。


查看完整回答
反對 回復 2021-11-26
  • 3 回答
  • 0 關注
  • 226 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號