我是PHP的初学者,我的英语可能是错误的...我试图找到一种通过phpmailer发送带有附件的邮件的方法。目前,将文件上传到服务器上的目录上,但是有2个文件,一个是好的,另一个是0字节,而代码附加了该文件...一个错误!而且我找不到错...另外,当邮件发送时没有消息显示...如果有人可以帮助我,我非常感谢!
html :
<form action="formulaire.php" method="post" enctype="multipart/form-data">
<table align="center"><tr><td><label for="nom">Votre nom :</label></td>
<td><input type="text" name="nom" required/><br></td></tr>
<tr><td><label for="prenom">Votre prénom: </label></td>
<td><input type="text" name="prenom" required/><br></td></tr>
<tr><td><label for="societe">Société: </label></td>
<td><input type="text" name="societe" required/><br></td></tr>
<tr><td><label for="phone">Téléphone: </label></td>
<td><input type="text" name="phone" required/><br></td></tr>
<tr><td><label for="email">Votre E-mail: </label></td>
<td><input type="email" name="email" required/><br></td></tr>
<tr><td><label for="message">Texte explicatif :</label></td><br>
<td><textarea name="message" rows="2" cols="50" required></textarea></td></tr>
<tr><td><input type="hidden" name="MAX_FILE_SIZE" value="10000000"> Send this file: <input name="userfile" type="file"></td></tr>
<tr><td></td></tr>
<tr><td align="center"><input type="submit" value="Envoyer"></td></tr></table>
</form>
php :
<?php
if (array_key_exists('userfile', $_FILES)) {
$uploadfile = tempnam('upload', $_POST['nom']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile.".jpg")) {
require_once("PHPMailer/class.phpmailer.php");
require_once('PHPMailer/PHPMailerAutoload.php');
$mail = new PHPMailer();
$mail->From = $_POST['email'];
$mail->IsMail ();
$mail->ClearAddresses ();
$mail->AddAddress ("xxx@xxxxx.com");
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'xxxxx';
$mail->Body = '<ul>
<li>Nom : '. $_POST['nom'] .'</li>
<li>Prenom : '. $_POST['prenom'] .'</li>
<li>Societe : '. $_POST['societe'] .'</li>
<li>Telephone : '. $_POST['phone'] .'</li>
<li>E-mail : '. $_POST['email'] .'</li>
'.$filename;'
</ul>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->addAttachment($uploadfile, '');
if(!$mail->send()) {
$msg = "Mailer Error: " . $mail->ErrorInfo;
} else {
$msg = "Message sent!";
}
} else {
$msg = 'Failed to move file to ' . $uploadfile;
}
}
?>
tempnam()
实际上在调用它时会创建一个空文件。这就是它"保留"唯一临时文件的方式。但是,当您调用move_uploaded_file()
时,您将" .jpg"附加到最后。这就是为什么您有两个文件副本,一个是空的。
稍后在您的消息中,您将附加$uploadfile
而不是$uploadfile.'.jpg'
;这就是为什么0个长度文件是附加到电子邮件的文件的原因。请注意,使用第二个Paramater,您可以将文件命名为任何您想要的文件,并且将使用该文件,而不是磁盘上的文件名称。就您的情况而言,这会更好,因为用户不会收到带有随机gibberish名称的文件;相反,您可以使用$_FILES['userfile']
数组中的原始名称。