电子邮件表格(PHP;发送和同一页面上的消息)

时间:2014-12-04 14:25:55

标签: php css3 email post message

我的联系表格有一些问题。我已经尝试了几种解决方案并且一直在阅读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>

今天我使用post函数在同一页面上发布“成功消息”。但我无法使用任何尝试的解决方案。验证已经在CSS3中构建。我需要的是发送一封电子邮件,其中包含(已生效,但邮件和验证会在新页面上弹出),并会在同一页面上显示一条消息(此无论我尝试什么都行不通。

帮助?

2 个答案:

答案 0 :(得分:0)

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

其次,像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

答案 1 :(得分:0)

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

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

  1. 在send_form_email.php中设置要在会话中显示的消息
  2. 然后,对要显示消息的PHP页面执行标题位置
  3. 在此PHP中检查会话变量是否已设置,如果已设置,则以HTML格式显示
  4. 看起来像那样

    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页面的块中。