内联PHP发送邮件无法正常工作

时间:2017-09-07 03:45:25

标签: php

PHP不是我的力量,当我被要求实现模态通讯订阅弹出窗口时,我感到畏缩,因为我知道我将不得不使用PHP。我整天都在网上搜索各种各样的东西,但我似乎无法得到任何工作,我真的希望有人能够指出我正确的方向。它非常简单,我只需要一个名称和电子邮件地址,然后发送到我指定的帐户。我确信这是非常基本的,但由于我缺乏PHP的经验,我完全迷失了我的错误。我的代码如下。

<?php
if($_POST["submit"]) {
    $recipient="my@emailaddress.com";
    $subject="Newsletter Subscription";
    $senderName=$_POST["name"];
    $senderEmail=$_POST["email"];

    $mailBody="Name: $senderName\nEmail: $senderEmail\n\nThis is a test!";

    mail($recipient, $subject, $mailBody, "From: $senderName <$senderEmail>");

    header('Location:http://www.urltoredirect.com/');
}
?>

<html>

<head>
    <title></title>
</head>

<body>
    <form method="post" action="sendmail.php">
        <div class="rbm_input_txt">
            <input type="name" name="name" placeholder="name" required>
        </div>
        <div class="rbm_input_txt">
            <input type="email" name="email" placeholder="email" required>
        </div>
        <div class="rbm_form_submit">
            <button type="submit" class="rbm_btn_x_out_shtr">subscribe</button>
        </div>
    </form>
</body>

</html>

我将文件保存为sendmail.php并上传到我的服务器。当我填写表单时,页面只是重新加载,它没有重定向到指定的URL,我没有收到任何电子邮件。我怀疑问题出在发送邮件中,一旦排序,重定向就会起作用。任何人都可以看到我遗失的任何明显事物吗?

编辑:在我的代码中添加了name属性,如下所示。问题仍未解决。

2 个答案:

答案 0 :(得分:1)

标签中必须有名称

  <div class="rbm_input_txt"><input type="name" placeholder="name" name="name" required><input type="email" placeholder="email" name="email``" required

答案 1 :(得分:1)

您正在检查$_POST['submit']是否真实,但您的表单实际上并未设置该值。您可以进行两项更改来解决此问题:

  1. 为了使submit密钥出现在您的请求中,您需要将其分配给表单中的字段。您可能希望将其添加到提交按钮,只需将name参数添加到提交按钮即可:

    <button name="submit" type="submit" class="rbm_btn_x_out_shtr">subscribe</button>
    
  2. 即使进行了上述更改,$_POST['submit']仍将评估为false,因为其值为空。 (你可以在boolean conversions的规则中看到这一点。)你可以通过检查它的集合来解决它,而不是它的真实性:

    if (isset($_POST['submit']))
    
  3. 或者,您可以只查找其他字段,例如nameemail,因为您知道这两个字段都将在提交时设置。