我怎样才能使这个电子邮件确认工作?


How can I make this email confirmation work?

我试过使用邮件功能发送简单的电子邮件,它工作。但是当我试图把它插入到程序时,它不会。谁能告诉我哪一部分是错的,因为我很确定它不是关于xampp/sendmail配置-我已经尝试了2个简单的邮件程序,他们都工作,除了这个。

我尽了最大的努力用……来代替不需要的行。我认为问题是,它无法进入程序读取电子邮件功能部分的部分?

我的register.php:

<?
session_start();
if(isset($_POST['register']))
{
    include('/class.register.php');
    $register = new Register();
if($register->process()) {
    header('location: login.php');
}
else  {
    $register->show_errors();
}
}

?>
<form method= "POST" action="<?=$_SERVER['PHP_SELF'];?>">
<table>
<tr><td>Username:</td><td><input type="text" name="ruser" required="required" /></td></tr>
<tr><td>Email:</td><td><input type="text" name="remail" required="required" /></td></tr>
<tr><td>Password:</td><td><input type="password" name="rpass" required="required" /></td></tr>
<tr><td>Title:</td><td><input type="text" name="rtitle" required="required" /></td></tr>
<tr><td>First Name:</td><td><input type="text" name="rfname" required="required" /></td></tr>
<tr><td>Last Name:</td><td><input type="text" name="rlname" required="required" /></td></tr>
<tr><td>Mobile Number:</td><td><input type="text" name="rmobile" required="required" /></td></tr>

</table>
<input type="submit" name="register" value="Sign Up" />
</form>

这是我的class.register.php:

<?
class Register
{
...
private $errors;  
public function __construct()
{
    $this->errors = array();
    ...;
    $this->token = $_POST['token'];
    $this->passmd5 = md5($this->password);
}
public function process()
  {
  if($this->valid_data() && $this->send_email())
$this->register();
return count($this->errors)? 0: 1;
}
public function filter($var)
{
    return preg_replace('/[^a-zA-z0-9@.]/','',$var);
}
public function user_exists()
{
    ...
} 
public function email_exists()
 ...
public function register()
{
    ...
}
public function show_errors()
 echo "<h3>Errors</h3>";
    foreach($this->errors as $key=>$value)
    echo $value."<br>";
public function valid_data()
...

public function send_email()
{
$from = 'jeremiah@citydelivery.ph';
$to = $_POST['remail'];
$subject = 'Registration confirmation';
$message = 'Please click the following link or copy and paste it
into your browser to complete the registration process: ';
$message .= 'http://example.com/confirm.php?u=';
$message .= urlencode($_POST['ruser']);
$message .= '&amp;t=';
$message .= urlencode($_POST['token']);
return mail($to, $subject, $message, $from);
}

}
?>

$this->send_email必须是$this->send_email()

它是一个函数而不是一个变量;)

也可以在语句中使用它,但send_mail()不返回任何东西,因此它返回null,最终为false。

所以做return mail($to, $subject, $message, $from);修复

if语句按顺序执行,直到遇到false, 当只使用&&(和)

你有

if($this->valid_token() && $this->valid_data() && $this->send_email())

所以它可能永远不会命中send_mail(),因为valid_data()是假的。

使用var_dump($this->valid_token(), $this->valid_data(), $this->send_email()来检查,第一个为false的是你要解决的问题,然后是一个。

使用下面的进程函数,它检查哪一个是问题。我建议在它工作后删除die()函数

public function process()
  {
if($this->valid_token()) { die('token is the problem'); }
if($this->valid_data()) { die('valid data is the problem'); }
if($this->send_email()) { die('send email is the problem'); }
 if($this->valid_token() && $this->valid_data() && $this->send_email)
    $this->register();
return count($this->errors)? 0: 1;
}

我要感谢你们所有人的贡献。我通过创建另一个文件sendmail.php修复了这个问题,然后将其包含在我的register.php中。