gpt4 book ai didi

php - 使用 PHPMailer 的文件附件

转载 作者:行者123 更新时间:2023-12-04 21:19:36 24 4
gpt4 key购买 nike

我有一个带有上传文件选项的 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 = "yoursmtp@username.com"; // 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("your@email.com", "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 将文件附加到电子邮件中。
我用了 This Tutorial在执行 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);

关于php - 使用 PHPMailer 的文件附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com