我有一个HTML表单,可以选择上传文件。
然后,我希望将该文件作为附件发送到电子邮件地址,以及其余的表单数据。
我正在使用PHP Mailer,并获取要发送的表单数据:例如姓名,电话号码等。
我无法获得与图像一起发送的图像。我已经提供了到目前为止的代码
<!DOCTYPE html>
<html>
<head>
<title>Form</title>
</head>
<body>
<form id='contactus' action='contact.php' enctype="multipart/form-data" method='post'>
<fieldset >
<legend>Contact us</legend>
<div class='container'>
<label for='email' >Name*:</label><br/>
<input type="text" id="name" name="name" required /><br>
<label for='email' >Phone*:</label><br/>
<input type="text" id="phone" name="phone" required /><br>
<label for='email' >Email*:</label><br/>
<input type='text' name='email' id='email' required/><br/>
<label for='message' >Message:</label><br/>
<textarea rows="10" cols="50" name='message' id='message'></textarea>
<br>
<!-- Name of input element determines name in $_FILES array -->
Send this file: <input id="file" name="image" type="file" />
<input type='submit' name='Submit' value='Submit' />
</div>
</fieldset>
</form>
</body>
</html>
<?php
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("jpeg","jpg","png","pdf");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a PDF, JPEG or PNG file.";
}
if($file_size > 2097152) {
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true) {
move_uploaded_file($file_tmp,"uploads/".$file_name); //The folder where you would like your file to be saved
echo "Success";
}else{
print_r($errors);
}
}
// PHPMailer script below
$email = $_REQUEST['email'] ;
$name = $_REQUEST['name'] ;
$phone = $_REQUEST['phone'] ;
$message = $_REQUEST['message'] ;
require("phpmailer/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Username = "[email protected]"; // SMTP username
$mail->Password = "hidden"; // SMTP password
$mail->addAttachment("uploads/".$file_name);
$mail->From = $email;
$mail->SMTPSecure = 'tls';
$mail->Port = 587; //SMTP port
$mail->addAddress("[email protected]", "your name");
$mail->Subject = "You have an email from a website visitor!";
$mail->Body ="
Name: $name<br>
Email: $email<br>
Telephone: $phone<br><br><br>
Comments: $message";
$mail->AltBody = $message;
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "<script>alert('Message has been sent')</script>";
?>
编辑:[已解决]我已经将代码片段中的代码更新为工作代码,该代码使我可以使用PHPMailer将文件附加到电子邮件中。在执行PHPMailer脚本之前,
我使用了本教程来帮助将文件上传到服务器。
您打电话的时候
move_uploaded_file($file_tmp,"uploads/".$file_name);
这会在uploads/
目录中创建一个文件,其名称与在上传者计算机上命名的文件名称相同。
然后,您使用示例代码将附件添加到phpMailer中,因此您基本上是在尝试附加不存在的文件。
这两行:
$mail->addAttachment('uploads/file.tar.gz'); // I took this from the phpmailer example on github but I'm not sure if I have it right.
$mail->addAttachment('uploads/image.jpg', 'new.jpg');
应该更改为:
$mail->addAttachment("uploads/".$file_name);
另请注意,move_uploaded_file
如果您不希望在上传附件并通过电子邮件发送后保存附件,则无需致电。如果是这种情况,只需AddAttachment
使用$_FILES['image']['tmp_name']
作为文件参数进行调用。
另外,在您的HTML表单中,
<input id="file" name="file" type="file" />
但请参考image
代码中的输入。您应该将该输入的名称从更改file
为image
。
要仅附加图像而不保存图像,请删除move_uploaded_file
代码并添加:
$file_tmp = $_FILES['image']['tmp_name'];
$file_name = $_FILES['image']['name'];
//...
$mail->AddAttachment($file_tmp, $file_name);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句