繁体   English   中英

电子邮件HTML表单提交和CSV文件附件-接收多封电子邮件

[英]Email HTML form submissions with csv file attachment - receiving multiple emails

我被要求创建一个表单,提交后将向管理员发送一封电子邮件,其中包含整理数据的.csv附件。

我搜寻了互联网并找到了该解决方案,它可以正常工作! 但是,提交后我会收到大约3-4封电子邮件(似乎有所不同)。 这是代码,还是我已经收到垃圾邮件?

HTML表单:

      <form method="post">
            <p>Enter your email address
            <input type="text" name="email" size="50" />
            </p>
            <p>Please add your first name
            <input type="text" name="firstName" size="20" />
            </p>
            <p>Please add your last name
            <input rows="2" name="lastName" size="20"></input>
            </p>
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            <p>
            <input type="submit" value="Submit" name="B1" />
            <input type="reset" value="Reset" name="B2" />
            </p>
        </form>

PHP代码:

        <?php

            $email=$_REQUEST['email'];
            $firstName=$_REQUEST['firstName'];
            $lastName=$_REQUEST['lastName'];


            $to = "test@testmail.co.uk";


            $subject = "Test subject";

            $message = "".
            "Email: $email" . "\n" .
            "First Name: $firstName" . "\n" .
            "Last Name: $lastName";

            //The Attachment

            $cr = "\n";
            $data = "Email" . ',' . "First Name" . ',' . "Last Name" . $cr;
            $data .= "$email" . ',' . "$firstName" . ',' . "$lastName" . $cr;
            $fp = fopen('diploma_apprenticeship_form_sub.csv','a');
            fwrite($fp,$data);
            fclose($fp);

            $attachments[] = Array(
               'data' => $data,
               'name' => 'diploma_apprenticeship_form_sub.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 sttachments

            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);

            ?>

提前致谢,

马特

最后,我仅添加了一条if语句,该语句表明email字段等于什么时不发送任何电子邮件。 这样可以避免在加载页面时触发电子邮件,而在提交后页面重置时将触发电子邮件-因此,为什么我会收到3封电子邮件!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM