PHP 生成的带有 CSV 附件的电子邮件 - 发送额外(不正确)版本



我是一个完全的 php 新手,所以如果这是非常明显的事情,请原谅我!我尝试在我的网站上创建一个 html 表单,该表单在提交时会生成一封带有 csv 附件的电子邮件,该电子邮件将发送给我并提供相关信息。

我一直在使用在线找到的代码(一些来自此论坛)来尝试创建一个解决方案,并且似乎非常接近 - 但是某处存在问题。我在提交时收到 2 封电子邮件 - 第一封不正确,因为它缺少发件人的电子邮件地址并且 csv 没有信息 - 然而第二封电子邮件完全正确。

这是我正在使用的代码:

<?php
        $email=$_POST['email'];
        $customer=$_POST['customer'];
        $quantity=$_POST['quantity'];
        $prefix=$_POST['prefix'];
        $itemno=$_POST['itemno'];
        $format=$_POST['format'];

        $to = "me@myemail.com";

        $subject = "Form 01";
        //Message Body
        $text = "Form 01 attached";
        //The Attachment
         $cr = "n";
        $data .= "$email" . $cr;
        $data .= "$customer" . $cr;
        $data .= "$quantity" . $cr;
        $data .= "$prefix" . $cr;
        $data .= "$itemno" . $cr;
        $data .= "$format" . $cr;
        $fp = fopen('form01.csv','a');
        fwrite($fp,$data);
        fclose($fp);
        $attachments[] = Array(
           'data' => $data,
           'name' => 'form_01.csv',
           'type' => 'application/vnd.ms-excel'
        );

        //Generate a boundary string
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

        //Add the headers for a file attachment

        $headers = "MIME-Version: 1.0n" .
                   "From: {$from}n" .
                   "Content-Type: multipart/mixed;n" .
                   " boundary="{$mime_boundary}"";

        //Add a multipart boundary above the plain message

        $message = "This is a multi-part message in MIME format.nn" .
                  "--{$mime_boundary}n" .
                  "Content-Type: text/html; charset="iso-8859-1"n" .
                  "Content-Transfer-Encoding: 7bitnn" .
                  $text . "nn";

        //Add attachments
        foreach($attachments as $attachment){
           $data = chunk_split(base64_encode($attachment['data']));
           $name = $attachment['name'];
           $type = $attachment['type'];
           $message .= "--{$mime_boundary}n" .
                      "Content-Type: {$type};n" .
                      " name="{$name}"n" .
                      "Content-Transfer-Encoding: base64nn" .
                      $data . "nn" ;
        }
        $message .= "--{$mime_boundary}--n";
        mail($to, $subject, $message, $headers);

        ?>

我也在尝试添加 reCaptcha,这很好,除了它似乎只允许第一封电子邮件通过 - 这是不正确的电子邮件。所以我希望如果问题出在上面的代码中并且可以修复,那么这也应该得到解决。

提前感谢!

你给我们的代码(我猜)不完整。它(显然)不是完整的HTML页面。我想这个PHP脚本在你的HTML页面的顶部,在你的表单上方。我说的对吗?

因此,当您打开页面时,PHP 脚本会发送第一封(空)电子邮件。提交表单并提交您的 $_POST 数组后,将发送第二封(也是正确的)电子邮件。

要解决此问题,您必须检查 $_POST 数组是否不为空:

<?php
if (!empty($_POST["email"])) {
   //your code here
}
?>

像这样: 如果 是 $_POST

最新更新