电子邮件表单根据附件发送多封邮件
Posted
技术标签:
【中文标题】电子邮件表单根据附件发送多封邮件【英文标题】:Email form sends multiple mails depending on attachments 【发布时间】:2015-03-03 23:57:27 【问题描述】:所以基本上我想要一个可以发送带有一张或多张图片的消息的电子邮件系统,我现在遇到的问题是,当我上传 4 张图片时,表单会向我发送 4 封相同文本但只有一张图片的电子邮件一次。我希望将它们全部添加为 1 封电子邮件的 4 个附件,而不是 4 封电子邮件的 1 个附件。
这是我的 html:
<form id="upload" method="post" action="upload.php">
<div id="drop">
Onderwerp<br>
<input name="txtSubject" type="text" id="txtSubject" /><br>
Omschrijving<br>
<textarea name="txtDescription" cols="30" rows="4" id="txtDescription"></textarea><br>
Voeg afbeeldingen toe
<input type="file" name="fileAttach" multiple accept="image/*;capture=camera" />
<input type="submit" name="Submit" value="Send">
</div>
<ul>
<!-- The file uploads will be shown here -->
</ul>
</form>
这是我的 PHP:
<?
$strTo = "email@email.com";
$strSubject = $_POST["txtSubject"];
$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.";
?>
我对 PHP 不是很好,我使用了一个多图像上传器并尝试将其变成一个邮件表单,这很有效.. 除了多电子邮件发送部分。
非常感谢任何帮助! :)
【问题讨论】:
使用for循环来包含附件......更好的方式是使用邮件类,例如。快速邮件 【参考方案1】:尝试类似:
for($i=0;$i<count($_FILES["fileAttach"]["name"]);$i++)
if($_FILES["fileAttach"]["name"][$i] != "")
$strFilesName = $_FILES["fileAttach"]["name"][$i];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"][$i])));
$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";
【讨论】:
以上是关于电子邮件表单根据附件发送多封邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何一次发送多封电子邮件,每个电子邮件都带有一个 xlsx 文件附件?