【问题标题】:PHP mail with attachment not working as a Shortcode带有附件的 PHP 邮件不能用作简码
【发布时间】:2014-04-08 10:31:20
【问题描述】:

因此,我被要求创建一个表单,一旦填写完毕,就会向我的客户发送一封包含表单条目的电子邮件,其中必须包含一个包含数据的 .csv 文件附件。

最初我通过将其硬编码到一个普通页面来测试它。

   <form class="main-form" method="post">
        <ul>
            <li><div>Email: </div><input type="email" name="email" size="20" /></li>

            <br />
            <input type="submit">

            </ul>
        </form>

        <?php

            $email=$_REQUEST['email'];

            if ($email =="") {
                //Do nothing
            } else {

            $to = "mail@test.co.uk";
            $from = "test";


            $subject = "test";

            //Message Body
            $text = "test";

            //The Attachment
            $cr = "\n";
            $data = "Email"
            $data .= "$email". $cr;
            $fp = fopen('test.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: BRS\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);
        }

            ?>

这可以正常工作,并且可以完全按照我的意愿通过电子邮件发送附件。但是,他们现在希望将其作为简码,以便他们可以将其发布到他们的 wordpress 构建中的任何位置。所以我添加了短代码并将代码发布到一个 php 函数中,当 wordpress 检测到 [form] 时调用该函数。但是现在不行了。

function main_form() {

return <<<HTML
 <form class="main-form" method="post">
        <ul>
            <li><div>Email: </div><input type="email" name="email" size="20" /></li>

            <br />
            <input type="submit">

            </ul>
        </form>
 HTML;

 // Then rest of php as it was above
 }

表单输出正常,但我不再收到电子邮件。最初我认为$_REQUEST[]; 没有获取数据,但我将 $email 设置为固定字符串,但它仍然不起作用。

有人有什么想法吗?

【问题讨论】:

    标签: php html wordpress


    【解决方案1】:

    将您的 HTML 更改为以下内容:

    <form class="main-form" method="post" action="file.php">
    

    提交表单后,您将被重定向到“file.php”。

    您可以在这里找到一个工作示例:http://www.w3schools.com/php/php_forms.asp

    【讨论】:

    • 为什么我必须这样做?当然php可以在同一页面上完成?
    • 在操作上,您还可以从同一文件中调用方法。在这种情况下,您将在文件中创建一个函数,并且您将使用类似:“if(isset($_POST["submit"]){" 。您可以在此处找到类似的内容:stackoverflow.com/a/16269295/1564840
    【解决方案2】:

    原来我在 PHP 的其余部分之前使用了 return 语句,因此它正在打印 HTML 并退出函数。通过将 return 放在函数的末尾,它现在可以工作了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2015-12-10
      相关资源
      最近更新 更多