Html 表单附件未到达目的地

问题描述 投票:0回答:1

我的网站上有一个 html 邮件表单,它应该允许用户将图像文件附加到他们提交的表单中。

几年来,该表格一直发挥着神奇作用。

*注意:我一直将表单数据定向到 Gmail 帐户。

最近,提交的表格开始严重延迟到达,或者根本没有出现。

我不记得在代码中更改过任何可能导致这种突然变化的内容。

我通过将表单数据重定向到其他电子邮件平台来测试该问题,并“部分”成功。

更具体地说...意味着在测试时,表单提交似乎确实一致地到达新定向的目标平台。

但是...附件(图像)未成功到达。附件到达时已损坏(0 字节),无法在任何其他平台上下载或查看。

这让我相信罪魁祸首可能就在 php 代码本身的文件附件部分。这个理论可以解释为什么 gmail 完全拒绝提交的内容,以及为什么其他平台交付提交的内容,但附件损坏。

但是,正如我提到的,我没有以任何方式更改代码,并且我已经检查了几次,但我无法发现任何错误或问题。

任何帮助解决这个谜团的帮助将不胜感激。

我在下面包含了我的 php-handler 代码...

PHP 处理程序:

<?php

$fileName =  $_FILES['userImages']['name'];
$tmpName = $_FILES['userImages']['tmp_name'];
$name = $_POST['userName'];
$email = $_POST['userEmail'];

$composition =

"\r\n\n\nName: "                        . $name .
"\r\nEmail Address: "                   . $email;

$fromname ="$name";
$fromemail = "$email";

$mailto = '[email protected]';

$content = file_get_contents($tmpName);
$content = chunk_split(base64_encode($content));

$separator = md5(time());

$eol = "\r\n";

$headers = "From: ".$fromname." <".$fromemail.">" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol;

$body = "--" . $separator . $eol;
$body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol;
$body .= $composition . $eol;

$body .= "--" . $separator . $eol;
$body .= "Content-Type: application/octet-stream; name=\"" . $fileName . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachment" . $eol;
$body .= $content . $eol;
$body .= "--" . $separator . "--";

@mail($mailto, $subject, $body, $headers);

header('location: /sent_confirmation.php');

?>
php base64 attachment mime mail-form
1个回答
0
投票
  1. 您的邮件内容(特别是附件部分)缺少了一些$eof,请修改为

  2. 您尚未指定 $subject(例如 $subject="Test email PHP";)

所以请修改为:

<?php

$fileName =  $_FILES['userImages']['name'];
$tmpName = $_FILES['userImages']['tmp_name'];
$name = $_POST['userName'];
$email = $_POST['userEmail'];


$subject="Test email PHP";


$composition ="\r\n\n\nName: " . $name . "\r\nEmail Address: ". $email;


$fromname =$name;
$fromemail = $email;

$mailto = '[email protected]';

$content = file_get_contents($tmpName);
$content = chunk_split(base64_encode($content));



$separator = md5(uniqid(time()));

$eol = "\r\n";

$headers = "From: ".$fromname." <".$fromemail.">" . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed;". $eol. " boundary=\"" . $separator . "\"" . $eol;
// $headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol . $eol;

$body = "--" . $separator . $eol;
$body .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol . $eol;
$body .= $composition . $eol;

$body .= "--" . $separator . $eol;
$body .= "Content-Type: application/octet-stream;". $eol. " name=\"" . $fileName . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;

$body .= "Content-Disposition: attachment;". $eol . " filename=\"" . $fileName."\"" . $eol . $eol ; 
$body .= $content . $eol;
$body .= "--" . $separator . "--";

mail($mailto, $subject, $body, $headers);

//header('location: /sent_confirmation.php');
echo "Done";

?>

顺便请注意,对于[电子邮件受保护]收件人,gmail 服务器可能会因为各种原因(无 PTR 记录/SPF/DMARC/DKIM 等)过滤掉您的电子邮件,您必须单独修复。因此,请先针对非 Gmail 帐户再次尝试上述操作。

© www.soinside.com 2019 - 2024. All rights reserved.