如何提交HTML表单按钮,无需打开用户的电子邮件客户端即可向网站管理员发送电子邮件,然后重定向到另一个页面?

时间:2013-11-21 02:21:04

标签: php html email html-form

我有一个非常基本的HTML表单:

<form method="post" action="http://someurl.com" target="_new">
    <input name="name" value="" type="text" placeholder="Your First Name"  />
    <input name="from" value="" type="text"  placeholder="Your Best Email" />
    <input type="image" name="image" src="images/submit.gif" type="submit" />
</form>

表单提交后,我希望它能够重定向到上面表单操作中指示的URL,并且还要向我发送一封电子邮件,而不会打开用户的邮件客户端通知填写表单的用户。

对于我在网上收集的内容以及从本网站收集的信息,我需要以下面的PHP形式

<?php
///subscribe form
$recipient = "email@email.com"; ///  Your Email address
if (isset($_POST['email']))
  {
  //Send Mail To Webmaster
  $email = $_POST['email'] ;
  $subject = 'New Subscriber';
  $message =  $email . ' has been subscribed to your website.';
  mail("$recipient", $subject,
  $message, "From:" . $recipient);
 ;}
 ?>

但是我不够精通创建AJAX代码来组合它们中的两个?

我感谢您的帮助,请具体说明!我已经看到大量回复类似问题的通用答案,如果你知道我必须使用php,ajax等,请说明如何并提供示例代码。即。我是否需要使用该代码创建一个文件,如何调用该文件并使其从我的HTML表单中运行?等

UPDATE,好的,我发现下面的script.js是调用上面名为mail.php的php文件 有用!但是......它会将填写表格的人的电子邮件信息发送给我自己,而不是姓名。

$(function() {
        $(".submit-btn").click(function() {
        var x=$(".mail-input").val();
        var atpos=x.indexOf("@");
        var dotpos=x.lastIndexOf(".");
        var email = $(".mail-input").val();
        var dataString = 'email='+ email;

        if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
        {
        $(".mail-input").css({"background-color":"rgba(216, 70, 55, 0.64)"});
        }
        else
        {
        $.ajax({
        type: "POST",
        url: "mail.php",
        data: dataString,
            success: function(){
                window.location.href = "http://someurl.com";
            }
        });
        }
        return false;
        });

任何人都告诉我如何捕获表单的名称字段数据并将其发送到电子邮件中,看起来上面的代码仅用于只包含电子邮件字段的表单并将该数据发送给网站管理员,我需要将表单中的名称字段添加到代码中。

谢谢!

2 个答案:

答案 0 :(得分:1)

您不需要ajax,只需将表单操作设置为您的php脚本URL。

要重定向用户,可以使用php函数location(内部演示)。只需在致电location后拨打mail电话。

答案 1 :(得分:1)

好的,有些事情:

  1. 我不确定我是否正确阅读了示例php,但是您是否打算将From地址设置为$_POST['email']中的值?如果是这样,这是非常不良做法,可能会导致您的网络托管服务商无法从其服务器发送电子邮件。确保发件人地址是您拥有或控制的地址,而不是用户提供的地址。请参阅我的评论和其他人question where this was the intent

  2. 如果您要发送电子邮件然后重定向,请从处理发送电子邮件的脚本重定向,而不是在表单中设置重定向网址:

    <form method="post" action="/form_handler.php" target="_new"></form>

    <?php
    ///subscribe form
    $recipient = "email@email.com"; ///  Your Email address
    if (isset($_POST['email'])) {
        //Send Mail To Webmaster
        $email = $_POST['email'] ;
        $subject = 'New Subscriber';
        $message =  $email . ' has been subscribed to your website.';
        mail("$recipient", $subject, $message, "From:" . $recipient);
    }
    header('Location: http://someurl.com/');
    
  3. 除了上面过度简化的脚本中的许多其他问题(它没有消除用户输入,它对DoS攻击非常开放等),外部并不总是一个好主意 - 依赖事件 - 例如连接到电子邮件服务器和发送电子邮件 - 发生在表单脚本的实际请求/响应中。这是我学到的难点。如果由于某种原因电子邮件挂起或邮件服务器在发送等时冻结,则用户将坐在那里等待脚本继续前进到下一部分(在这种情况下是重定向)并且不知道为什么页面没有更新(而且这也是AJAX的一个问题,它只是略有不同的烦人症状,可能更难调试,所以不要认为这是简单的解决方案)。您可能需要考虑将访问者的电子邮件地址和其他详细信息存储到本地数据库或类似设备,并在途中发送用户,然后使用某种调度程序(通常在后端通过cron运行),定期检查是否有新的自上次检查以来的电子邮件地址,如果是,则发送电子邮件独立于用户的表单提交请求。

  4. 最后,我打赌一百万美元,至少有4个好的PHP框架可以处理安全性,管理发送电子邮件(并且会使用SMTP而不是php的有限mail()功能),将重定向用户并使用我所描述的调度程序或作业队列。如果你想学习如何处理你所描述的场景,以提高你的技能和对web应用程序和php的理解,真棒。如果你打算在现实世界的网站上实现这里提供的解决方案,我强烈建议你现在停下来之前(或者更糟糕的是,实施一个不安全,不安全,不稳定的解决方案),而是考虑一些更好的轻量级PHP框架。