我想让人们在表格中发送附件以及其他信息。使用this Stackoverflow answer和大量的谷歌搜索我几乎对我现在拥有的东西感到满意。但是有一个问题:当用户没有附加文件(这没关系)时,我得到的错误是文件名不能为空(表单会被提交)。
编辑:我不想强制执行文件上传。相反,没有档案我很开心。但是(我认为?)join(file($_FILES['f']['tmp_name']))
期望一个文件,如果它没有得到一个将抛出一个错误(当表格仍然发送)。所以我想改变它的方式,这条线也没有上传文件。 / EDIT
不幸的是,我的大部分知识来自于试验和错误(以及我之前所做过的事情)。无论我尝试或谷歌我都找不到避免错误的方法。有人能帮我一把吗?
if( empty($errors))
{
$s = md5(rand());
mail('email@example.com', 'attachment', "--$s
Hello World!
--$s
Content-Type: application/octet-stream; name=\"f\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
".chunk_split(base64_encode(join(file($_FILES['f']['tmp_name']))))."
--$s--", "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$s\"");
}
($ errors确保用户在表单中提供了一个电子邮件地址。)
非常感谢!
答案 0 :(得分:0)
欢迎您使用此功能。您将不得不进行某些修改,但是无论是否附加文件都可以。
对于单个文件附件。
<html>
<head>
<title></title>
</head>
<body>
<form action="php_sendmail_upload.php" method="post" name="form1" enctype="multipart/form-data">
<table width="343" border="1">
<tr>
<td>To</td>
<td><input name="txtTo" type="text" id="txtTo"></td>
</tr>
<tr>
<td>Subject</td>
<td><input name="txtSubject" type="text" id="txtSubject"></td>
</tr>
<tr>
<td>Description</td>
<td><textarea name="txtDescription" cols="30" rows="4" id="txtDescription"></textarea></td>
</tr>
<tr>
<td>Form Name</td>
<td><input name="txtFormName" type="text"></td>
</tr>
<tr>
<tr>
<td>Form Email</td>
<td><input name="txtFormEmail" type="text"></td>
</tr>
<tr>
<td>Attachment</td>
<td><input name="fileAttach" type="file"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Send"></td>
</tr>
</table>
</form>
</body>
</html>
PHP处理程序(php_sendmail_upload.php)
<?php
// $strTo = $_POST["txtTo"];
$strTo = "email@example.com";
$strSubject = "Email attach subject";
$strMessage = nl2br($_POST["txtDescription"]);
//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));
$strHeader = "";
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"]."";
$strHeader .= "MIME-Version: 1.0\n";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$strHeader .= "This is a multi-part message in MIME format.\n";
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-type: text/html; charset=utf-8\n";
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$strHeader .= $strMessage."\n\n";
//*** Attachment ***//
if($_FILES["fileAttach"]["name"] != "")
{
$strFilesName = $_FILES["fileAttach"]["name"];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"])));
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
$strHeader .= "Content-Transfer-Encoding: base64\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$strHeader .= $strContent."\n\n";
}
$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error //
if($flgSend)
{
echo "Mail send completed.";
}
else
{
echo "Cannot send mail.";
}
?>