【问题标题】:Email form (PHP; post - send and message on same page)电子邮件表单(PHP;在同一页面上发布和发送消息)
【发布时间】:2015-02-02 11:25:44
【问题描述】:

我的联系表存在一些问题。我已经尝试了几种解决方案并经常阅读 Stack Overflow ......但由于每个代码都不同,我的解决方案需要一些独特的东西。不过应该很简单。

这是我的“表单页面”:

<form class="contact_form" action="send_form_email.php" method="post" name="contact_form">
<ul>
    <li>
        <label for="name">Namn:</label>
        <input type="text" name="name" required />
    </li>
    <li>
    <label for="email">E-post:</label>
    <input type="text" name="email" required />
</li>
    <li>
    <label for="phone">Tfn:</label>
    <input type="text" name="phone" required />
</li>
<li>
    <label for="message">Meddelande:</label>
    <textarea name="message" cols="40" rows="6" required ></textarea>
</li>
<li>
    <button class="submit" type="submit">Skicka</button>
</li>
</ul>
</form>

今天我正在使用发布功能在同一页面上发布“成功消息”。但我无法使其与任何尝试过的解决方案一起工作。验证已经内置在 CSS3 中。我需要的是发送一封电子邮件,格式为 (有效,但随后会在新页面上弹出消息和验证) 和显示在同一页面上的消息 (此无论我尝试什么,都无法正常工作)

帮助?

【问题讨论】:

    标签: php css email post message


    【解决方案1】:

    根据您在 PHP 中处理帖子的方式,有多种解决方案可以解决您的问题。

    对于纯 PHP/HTML,我的解决方案是,

    1. 在 send_form_email.php 中设置要在会话中显示的消息
    2. 然后,在要显示消息的 PHP 页面中设置标题位置
    3. 在这个 PHP 中检查是否设置了会话变量,如果设置了,则在 HTML 中显示它

    应该是这样的

    send_form_email.php

    if ( some_error )
      $_SESSION['msg'] = 'Some error message';
    else
      $_SESSION['msg'] = 'Success !!';
    header('Location: http://www.example.com/');
    

    some_other_file.php

    if (isset($_SESSION['msg']))
       echo $_SESSION['msg']; // or add it to a variable for late use in your HTML
    

    另一种解决方案是使用 Ajax 将表单发送到您的 php 文件,然后将来自您的文件(消息)的响应显示到您的 HTLM 页面中的一个块中。

    【讨论】:

      【解决方案2】:

      mail() 的 Windows 实现在许多方面与 Unix 实现不同。首先,它不使用本地二进制文件来编写消息,而仅在直接套接字上运行,这意味着需要 MTA 侦听网络套接字(可以在 localhost 或远程计算机上)。

      其次,像From:, Cc:, Bcc: and Date: 这样的自定义标头首先不是由 MTA 解释的,而是由 PHP 解析的。 因此,to 参数不应是“Something ”形式的地址。与 MTA 交谈时,mail 命令可能无法正确解析此内容。

      注意: 值得注意的是,mail() 函数不适合循环处理大量电子邮件。此函数为每封电子邮件打开和关闭一个 SMTP 套接字,效率不高。 如需发送大量电子邮件,请参阅 » PEAR::Mail 和 » PEAR::Mail_Queue 包。

      注意: 以下 RFC 可能有用: » RFC 1896、 » RFC 2045、 » RFC 2046、 » RFC 2047、 » RFC 2048、 » RFC 2049 和 » RFC 2822。

      您可以在正确创建标头的同时编写干净的 PHP 代码。首先,构建一个数组中所有标题的列表。然后,用“\r\n”字符将它们粘合起来。

      这段代码现在看起来干净直接。 (只需将其与您的代码进行比较)

      <?php
      $headers   = array();
      $headers[] = "MIME-Version: 1.0";
      $headers[] = "Content-type: text/plain; charset=iso-8859-1";
      $headers[] = "From: Sender Name <sender@domain.com>";
      $headers[] = "Bcc: JJ Chong <bcc@domain2.com>";
      $headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
      $headers[] = "Subject: {$subject}";
      $headers[] = "X-Mailer: PHP/".phpversion();
      
      mail($to, $subject, $email, implode("\r\n", $headers));
      ?>
      

      正如其他注释中所述;在执行以下操作时,可以轻松利用“附加标头”参数:

      <?php
        mail( $_POST['to'], $_POST['subject'], $_POST['message'], 'Reply-to: '.$_POST['from']."\r\n" );
      ?>
      

      解决此问题的一种简单方法是从标题字符串中删除 CRLF,如下所示:

      <?php
        $_POST['from'] = str_replace( "\r\n", '', $_POST['from'] );
      ?>
      

      这样,额外的数据将成为前一个标题的一部分。

      还有imap_mail 用于发送电子邮件。 此链接将非常有用:http://php.net/manual/en/function.imap-mail.php

      【讨论】:

        猜你喜欢
        • 2016-09-27
        • 2019-05-27
        • 1970-01-01
        • 2015-02-11
        • 2014-04-29
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        相关资源
        最近更新 更多