【问题标题】:PHP Mail - Send only when there is a POSTPHP 邮件 - 仅在有 POST 时发送
【发布时间】:2015-04-23 10:13:35
【问题描述】:

我正在构建一个简单的移动应用程序,用户可以通过该应用程序填写一个表格,然后将其发送到我的电子邮件地址。我使用JSON,然后使用PHPPOST 详细信息转发到我的电子邮件。

我唯一的问题是,当您访问我主机上的文件时,例如 www.example.com/forward.php ,我的邮箱中收到空电子邮件。

有没有办法只在有POST 时发送电子邮件?我可以做些什么来使它更安全吗?我不知道什么时候使用 PHP,我只是使用了 PHP 手册中的 sn-p (Link)

谢谢

【问题讨论】:

    标签: javascript php json angularjs email


    【解决方案1】:
    //If this page has no POST data, then don't go any further
    if (!$_POST) {
    //Die with a "bad request" header
    http_response_code(400);
    die();
    }
    

    值得补充的是,这种脚本一直被垃圾邮件机器人滥用,尤其是通过重放 POST 数据。如果正在部署它,您可能需要考虑一些额外的安全性。对于初学者,除了检查 POST 数据之外,您还应该检查您需要的每个字段是否存在并且格式是否有效。

    【讨论】:

    • 假设我有名字、姓氏、电子邮件和日期。我怎样才能知道它们在 PHP 中的格式是否有效?我正在明智地做一些验证 JS,但是如何在 PHP 中检查呢?
    • 有多种方法,但 filter_var 跳到脑海。 php.net/manual/en/filter.examples.validation.php
    【解决方案2】:

    检查一下,

    <?php
    
    if(isSet($_POST['submit']))
    {
     $name = $_POST['name'];
     $email = $_POST['password'];
     $password = $_POST['email'];
    
    if($name !="" && $email !="" && $password !="")
    {
      // Send mail ; 
    }
    else
    {
     echo "All fields are mandatory";
    
    }
    
    }
    else
    {
     //echo "You can not access this URL directly"; 
     header('location:http://www.example.com');
    }
    
    ?>
    

    【讨论】:

    • 是否可以列出多个需要的值?比如下面? if(isSet($_POST['name', 'surname', 'email']))
    • 在其他部分,是否可以将用户重定向到主站点,例如 www.example.com 而不是显示消息?
    【解决方案3】:

    您可以为此使用if (isset($_POST["some value that should be posted"]))

    【讨论】:

    • 虽然这可能会回答问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer
    【解决方案4】:

    试试这样的:

    <?php
        if( isset($_POST['submit']) ){
            $message = 'Message from your website:' . $_POST['message'];
            mail('to@example.com', 'Subject', $message);
            echo 'Thanks for your message!';
        } else {
    ?>
    
    <form action="" method="POST">
        <!-- your form fields here -->
        <textarea name="message"></textarea>
        <input type="submit" name="submit" value="Submit" />
    </form>
    
    <?php
        }
    ?>
    

    【讨论】:

      【解决方案5】:

      这可以通过检查 $_POST 变量是否已设置来很好地实现。因此,如果有人试图通过任何其他方法访问该文件,它将给他们一条消息或重定向他们。

      <?php
      
      if(isset($_POST['name']) AND isset($_POST['surname']) AND  isset($_POST['email'])){
          // Send your email ; 
      }
      
      else{
          //redirect
          header("Location: http://www.example.com");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-01
        • 1970-01-01
        • 2012-12-25
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        相关资源
        最近更新 更多