php生成的电子邮件与csv附件 - 发送额外(不正确)的版本

时间:2016-07-14 13:23:10

标签: php email 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.0\n" .
                   "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.\n\n" .
                  "--{$mime_boundary}\n" .
                  "Content-Type: text/html; charset=\"iso-8859-1\"\n" .
                  "Content-Transfer-Encoding: 7bit\n\n" .
                  $text . "\n\n";


        //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: base64\n\n" .
                      $data . "\n\n" ;
        }

        $message .= "--{$mime_boundary}--\n";
        mail($to, $subject, $message, $headers);


        ?>

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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

像这样:If isset $_POST