PHP邮件功能正在发送电子邮件,但消息未显示[关闭]

daolsyd0  于 10个月前  发布在  PHP
关注(0)|答案(1)|浏览(53)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
5天前关闭。
Improve this question
我花了两个月的时间从Jon Duckett的PHP & MYSQL中学习PHP。我正在我的网站上实施注册和电子邮件验证。我首先在成员表中存储一个新行,然后在令牌表中存储一个带有令牌和成员ID的行。然后,我向新用户发送一封带有锚点标签的电子邮件,该标签将把令牌发送回我网站上的一个页面,以验证电子邮件地址。电子邮件发送,但在我的雅虎电子邮件帐户,没有消息显示。html和锚标签显示在原始电子邮件的底部。在我的Outlook电子邮件地址上,该邮件显示为必须下载的附件。我只需要一个点击这里的消息显示在电子邮件中。

<?php
declare(strict_types = 1);                               // Use strict types
//use Validate;                                  // Import Validate class

include '../src/bootstrap.php';                          // Setup file

include 'includes/header.php'; 

$member = [];                                            // Initialize member array
$errors = [];                                            // Initialize errors array
$error_header = '';                                      // Initialize error header
$token = '';
//$id = '';
if (!array_key_exists("firstname", $member))
{
  $member['firstname'] = '';
}
if (!array_key_exists("lastname", $member))
{
  $member['lastname']  = '';
}
if (!array_key_exists("email", $member))
{
  $member['email']     = '';
}
if (!array_key_exists("username", $member))
{
  $member['username']     = '';
}
if (!array_key_exists("password", $member))
{
  $member['password']  = '';
}
if (!array_key_exists("firstname", $errors))
{
  $errors['firstname'] = '';
}
if (!array_key_exists("lastname", $errors))
{
  $errors['lastname']  = '';
}
if (!array_key_exists("email", $errors))
{
  $errors['email']     = '';
}
if (!array_key_exists("username", $errors))
{
  $errors['username']     = '';
}
if (!array_key_exists("password", $errors))
{
  $errors['password']  = '';
}
if (!array_key_exists("confirm", $errors))
{
  $errors['confirm']  = '';
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {              // If form was posted
    // Get form data
    $member['firstname'] = $_POST['firstname'];          // Get firstname
    $member['lastname']  = $_POST['lastname'];           // Get lastname
    $member['email']     = $_POST['email'];              // Get email
    $member['username']  = $_POST['username'];           // Get username
    $member['password']  = $_POST['password'];           // Get password
    $confirm             = $_POST['confirm'];            // Get password confirmation

    // Validate form data
    $errors['firstname'] = Validate::isText($member['firstname'], 1, 254)
        ? '' : 'Forename must be 1-254 characters';
    $errors['lastname']  = Validate::isText($member['lastname'], 1, 254)
        ? '' : 'Surname must be 1-254 characters';
    $errors['email']    = Validate::isEmail($member['email'])
        ? '' : 'Please enter a valid email';
    $errors['username']    = Validate::isText($member['username'])
        ? '' : 'Please enter a valid username';
    $errors['password'] = Validate::isPassword($member['password'])
        ? '' : 'Passwords must be at least 8 characters and have:<br> 
                A lowercase letter<br>An uppercase letter<br>A number 
                <br>And a special character';
    $errors['confirm']  = ($member['password'] = $confirm)
        ? '' : 'Passwords do not match';
    $invalid            = implode($errors);                  // Join error messages

    if (!$invalid) {                                         // If no errors
      $result = $cms->getMember()->create($member);        // Create member
      if ($result === false) {                             // If result is false
          $errors['email'] = 'Email address already used'; // Store a warning
          $errors['username'] = 'Or username already used';
      } 
      else 
      {                                             // Otherwise send to login
        $to = $member['email'];
        $subject = 'Verify email address';
        $id = $cms->getMember()->getIdByEmail($to);                 // Get member id 
        if ($id > 0)
        {
          $token = $cms->getToken()->create($id, 'verify_email');
          $link  = DOMAIN . '.com/' . 'verify-email.php?token=' . $token; 
          $body  = '<html><head><title>Verify email</title><body><p>To verify email address click: <a href="' . $link . '">here</a></p></body></html>';
          //$body = 'This is a test of the email notification system';
/*           $headers = "MIME-VERSION: 1.0\r\n";
          $headers .= "Content-type: text/htlm;charset=iso-8859-1\r\n";
          $headers .= "From: rogeralms@almsgames.com";
          $headers .= "X-Mailer: PHP " . phpversion(); */
          $headers = "From: rogeralms@almsgames.com\r\n";
          $headers .= "Content-type: text/htlm\r\n";
          
          mail($to, $subject, $body, $headers);
          header("Location: index.php?success=Check email for validation of email address.");
          //redirect('login.php', ['success' => 'Thanks for joining! Please log in.']); 
        }
        else
        {
        $error_header = '<div class="alert alert-danger">id returned ' . $id . '</div>';
        }
      }
    }
    else 
    {
      $error_header = '<div class="alert alert-danger">Please correct errors</div>';
    }
  }

?>
<main class="container" id="content">

<section class="header">
  <h1>Register</h1>
</section>
<form method="post" action="register.php" class="form-membership">
  <!-- {% if errors %}<div class="alert alert-danger">Please correct errors</div>{% endif %} -->
  <?php echo $error_header ?>
  <div class="form-group">
    <label for="firstname">Firstname: </label><input type="text" name="firstname" value="<?= htmlspecialchars($member['firstname']) ?>" id="firstname" class="form-control">
    <div class="errors"><?= $errors['firstname'] ?></div>
  </div>

  <div class="form-group">
    <label for="surname">Lastname: </label><input type="text" name="lastname" value="<?= htmlspecialchars($member['lastname']) ?>" id="lastname" class="form-control">
    <div class="errors"><?= $errors['lastname'] ?></div>
  </div>

  <div class="form-group">
    <label for="email">Email address: </label><input type="email" name="email" value="<?= htmlspecialchars($member['email']) ?>" id="email" class="form-control">
    <div class="errors"><?= $errors['email'] ?></div>
  </div>

  <div class="form-group">
    <label for="username">UserName: </label><input type="text" name="username" value="<?= htmlspecialchars($member['username']) ?>" id="username" class="form-control">
    <div class="errors"><?= $errors['username'] ?></div>
  </div>

  <div class="form-group">
    <label for="password">Password: </label><input type="password" name="password" id="password" class="form-control">
    <div class="errors"><?= $errors['password'] ?></div>
  </div>

  <div class="form-group">
    <label for="confirm">Confirm password: </label><input type="password" name="confirm" id="confirm" class="form-control">
    <div class="errors"><?= $errors['confirm'] ?></div>
  </div>

  <input type="submit" class="btn btn-primary" value="Register">
</form>

</main>

<?php include 'includes/footer.php'; ?>

字符串
我已经尝试了几个版本的标题,但我就是不能让消息的主体通过。
有人能给予我我做错了什么吗?
谢谢你的好意
我已经尝试了几个版本的$headers,但似乎都不起作用。

xtupzzrd

xtupzzrd1#

我觉得你写的代码不太严格,What does '<?=' mean in PHP?,尤其是分号。

before <?php echo $error_header ?>
after <?php echo $error_header; ?>

before <?= $errors['username'] ?>
after <?php echo $errors['username']; ?>

字符串

相关问题