注册后发送电子邮件验证

时间:2013-05-04 10:21:13

标签: php sql email verification

我想,在我的网站上注册的用户必须首先激活他们的帐户,然后再使用它。问题是,我没有收到任何电子邮件到我的电子邮件测试帐户。

在我开始发布代码之前,问题是,我目前正在使用xampp在本地计算机上工作吗?

否则,这是代码段

$random = substr(number_format(time() * rand(),0,'',''),0,10);
    $insertMailVerify = $this->db->prepare("INSERT INTO mailverify (mailAddress, token, datetime) VALUES (:mailAddress, :token, :date)");
    $insertMailVerify->execute(array(':mailAddress'=>$emailAddress,
                                     ':token'=>$random,
                                     ':date'=>$date));

    $to = $emailAddress;
    $subject = "Activating your Account";
    $body = "Hi, in order to activate your account please visit http://localhost/FinalYear/activation.php?email=".$emailAddress." and fill in the verification code $random";
    if(mail($to, $subject, $body))
    {
        echo ("<p>Message success</p>");
    }
    else {
        echo ("<p>Message fail</p>");
    }

万一你想知道我从哪里获取$ emailAddress:这只是一段代码片段,我已经让软件回复了电子邮件地址,这是正确的。如果是这样的话,它甚至会出现“消息成功”,但我仍然无法收到任何电子邮件。可能是什么问题?

5 个答案:

答案 0 :(得分:6)

提交表单后,您可以使用代码或链接并将其发送到用户电子邮件ID

$message = "Your Activation Code is ".$code."";
$to=$email;
$subject="Activation Code For Talkerscode.com";
$from = 'your email';
$body='Your Activation Code is '.$code.' Please Click On This link <a href="verification.php">Verify.php?id='.$db_id.'&code='.$code.'</a>to activate  your account.';
$headers = "From:".$from;
mail($to,$subject,$body,$headers);

echo "An Activation Code Is Sent To You Check You Emails";

来自TalkersCode.com的代码,请访问http://talkerscode.com/webtricks/account-verification-system-through-email-using-php.php

答案 1 :(得分:0)

在本地主机中我认为最好的方法是使用phpmailergmail帐户

这里是教程:http://www.web-development-blog.com/archives/send-e-mail-messages-via-smtp-with-phpmailer-and-gmail/

答案 2 :(得分:0)

您的邮件服务器 SMTP 似乎未正确配置....

检查SMTP服务器地址的端口和IP。

答案 3 :(得分:0)

尝试更改此类PHP.ini文件并告诉我它是否有效。

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP =  smtp.gmail.com

; http://php.net/smtp-port
smtp_port = 465 //if 465 is not working then try 25

如果这不起作用,那么有很多关于如何实现你想要做的教程。 这是一个链接:Send email from localhost

答案 4 :(得分:0)

有同样的问题,但在Linux上。

1)假设您的mail()功能正常运行:问题可能是,电子邮件进入垃圾邮件箱(因为这些本地邮件系统通常被标记为垃圾邮件,因此电子邮件服务正在保护未经验证的主机的电子邮件)

2)如果mail()不能正常工作,它的配置不正确,如果您按照一些教程进行配置(需要5分钟),您就会明白为什么不使用它:)

最好的方法是使用一些免费或付费的smtp服务。非常简单,快速,您的电子邮件不会被标记为垃圾邮件。并安装PEAR库以发送电子邮件。这是一个例子。

$from    = 'from@domain.com';
$to      = 'to@domain.com';
$subject = 'subject';
$body    = 'Hello!';

$host = 'smtpserver.com';
$port = '25';
$username = 'yourlogin';
$password = 'yourpass';

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject);
$smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if(PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
} else {
  echo("<p>Message successfully sent!</p>");
}

要验证验证码:不要告诉用户写下验证码,最好为他生成链接,点击他的帐户即可激活。像

这样的东西
http://localhost/FinalYear/activation.php?email=some@email.com&token=79054025255fb1a26e4bc422aef54eb4
注册页面上的

:生成激活令牌,如md5($email . '_sometext');

在激活页面if(md5($_GET['email'] . '_sometext') == $_GET['token']) { activate.. }

请注意,这只是一个例子,有10种方法可以完成:)