从表单发送文件附件使用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
线下)附件发送。 但…
- 我在
process.php
文件的顶部放入什么文件uploaded_file
? 就像使用$_FILES['uploaded_file']
从contact-us.php页面拉取文件一样? -
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(…)代码