从表单发送文件附件使用phpMailer和PHP

我有一个example.com/contact-us.php上的表单,看起来像这样(简化):

 <form method="post" action="process.php" enctype="multipart/form-data"> <input type="file" name="uploaded_file" id="uploaded_file" /> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> </form> 

在我的process.php文件中,我有下面的代码利用PHPMailer()发送一封电子邮件:

 require("phpmailer.php"); $mail = new PHPMailer(); $mail->From = me@example.com; $mail->FromName = My name; $mail->AddAddress(me@example.com,"John Doe"); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = "Contact Form Submitted"; $mail->Body = "This is the body of the message."; 

电子邮件正确发送正文,但没有upload_file的附件。

我的问题

我需要将表单中的文件uploaded_file附加到电子邮件中,然后发送。 在process.php脚本在电子邮件中发送它之后,我不关心保存文件。

我明白,我需要添加AddAttachment(); 某处(我正在假设在Body线下)附件发送。 但…

  1. 我在process.php文件的顶部放入什么文件uploaded_file ? 就像使用$_FILES['uploaded_file']从contact-us.php页面拉取文件一样?
  2. AddAttachment();里面有什么? 要将该文件连同电子邮件一起发送,这些代码需要去哪里?

请帮助并提供代码!谢谢!

尝试:

 if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) { $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'], $_FILES['uploaded_file']['name']); } 

基本的例子也可以在这里find。

AddAttachment的函数定义是:

 public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') 

文件无法从客户端PC上载(上传)

在HTML表单中,我没有添加下面的行,所以没有附件:

ENCTYPE =“多部分/格式数据”

在forms上添加上面的行(如下)后,附件变得完美了。

 <form id="form1" name="form1" method="post" action="form_phpm_mailer.php" enctype="multipart/form-data"> 

您将使用$_FILES['uploaded_file']['tmp_name'] ,这是PHP存储上传文件的path(这是一个临时文件,在脚本结束时由PHP自动删除,除非您移动/复制别处)。

假设您的客户端表单和服务器端上传设置是正确的,那么您就不需要做任何事情来“上传”上传。 它会神奇地在tmp_namepath中可用。

请注意,你将不得不validation上传实际上是成功的,例如

 if ($_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK) { ... attach file to email ... } 

否则,您可能会尝试使用损坏/部分/不存在的文件进行附件。

此代码帮助我在附件发送….

 $mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']); 

用上面的代码replace您的AddAttachment(…)代码