我有一個 HTML 表單,我正在使用 phpMailer。完成表單并單擊提交在文本輸入欄位等中輸入的所有資料時,按預期作業。但是,當我在收到電子郵件時將檔案附加到輸入型別“檔案”時,沒有附件。
有沒有人對為什么不附上附件有任何建議?
僅供參考 - 目前,該站點沒有 SSL 證書并且電子郵件將進入垃圾郵件檔案夾 - 這可能是問題嗎?
我是 phpMailer 的新手,通過研究已經能夠實作以下目標。
phpMailer()
<?php
$file = $_POST['file'];
// more variables...
$CustomerSignature = $_POST['q21'];
$Date = $_POST['q22'];
$filename = "./upload/" . $_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"],"./upload/" . $_FILES["file"]["name"]);
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
require 'phpMailer/src/Exception.php';
require 'phpMailer/src/PHPMailer.php';
require 'phpMailer/src/SMTP.php';
require 'phpMailer/src/OAuth.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 3;
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Username = '######';
$mail->Password = '######';
$mail->isHTML(true);
$mail->setFrom('######', '######');
$mail->addReplyTo('######', '######');
$mail->addAddress('######', '######');
$mail->addAddress('######');
$mail->AddAttachment($filename);
$mail->Subject = 'New Credit Application';
$mail->Body = '<b>New Credit Application (Online)!</b></br>'
.'Trading Name: '.$TradingName.'</br>'
.'blah blah blah etc.'
.'Customer Signature: '.$CustomerSignature.'</br>'
.'Date: '.$Date.'</br>';
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'The email message was sent.';
}
?>
HTML檔案附件部分:
<form method="POST" action="testmail2.php" id="myform" class="fs-form fs-form-full" autocomplete="off">
<ol class="fs-fields">
<li>
<label class="fs-field-label fs-anim-upper" for="file">Attachment</label>
<input class="fs-anim-lower" id="file" name="file" type="file" required/>
</li>
uj5u.com熱心網友回復:
你錯過了一件基本的事情:你沒有設定表單的編碼型別。默認編碼不適用于檔案,因此$_FILES將為空,因此類似的功能move_uploaded_file將失敗,因為沒有要移動的檔案,而不是因為您的路徑或權限錯誤(盡管您也可以這樣做!)。您的表單標簽應該是:
<form method="POST" action="testmail2.php" id="myform" class="fs-form fs-form-full" autocomplete="off" enctype="multipart/form-data">
除此之外,將您的代碼基于PHPMailer 提供的檔案上傳示例。
uj5u.com熱心網友回復:
$filename應該是您服務器上的絕對檔案路徑,而不是相對路徑,因為您有一個可以搞砸很多事情的前導點./......
你有:
$filename = "./upload/" . $_FILES["file"]["name"];
你應該擁有的是:
move_uploaded_file($_FILES["file"]["tmp_name"],$_SERVER['Document_root']."/path/to/upload/" . $_FILES["file"]["name"]);
...
$filename = $_SERVER['Document_root']."/path/to/upload/" . $_FILES["file"]["name"];
您應該使用 PHPMailer 錯誤報告器 ( $mail->SMTPDebug = SMTP::DEBUG_SERVER;) 來檢查此類事情,以及閱讀您自己的 PHP 錯誤訊息。此外,您應該遵循github 中設定的示例。
uj5u.com熱心網友回復:
你可以試試這個addStringAttachment()方法
不管它的名字是什么,它不僅適用于文本檔案,還適用于任何型別的檔案
請參考以下代碼片段
if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
$filename = $_FILES["file"]["tmp_name"];
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$mail->addStringAttachment($contents, $filename);
}
uj5u.com熱心網友回復:
我已經解決了這個問題
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
$filename = "upload/" . $_FILES["file"]["name"];
感謝所有幫助過的人
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/379942.html
上一篇:如何從HTML獲取視頻的src
