PHP如何实现邮箱验证

在PHP中,提供了 mail() 函数用于发送邮件。使用该函数需要设置邮件头信息、收件人地址、邮件主题和邮件内容等参数。下面是一个简单的使用示例:

$to = '收件邮箱';
$subject = '邮件主题';
$message = '邮件内容';
$from = '发件邮箱';
$headers = "From: $from" . "
" . "Reply-To: $from" . "
" . "X-Mailer: PHP/" . phpversion();
mail($to, $subject, $message, $headers);

我们要做的事情是在邮件内容中附上验证码和验证链接,验证码随机生成一个6位数即可:

​​​​​​​

function getContent($code,$mail){
    $content = "欢迎注册,请点击以下完成验证:

请点击

"; return $content; }

这里需要注意可能会出现邮件被视为垃圾邮件的情况。为了避免这个问题,我们需要注意以下几点:

1、邮件内容要真实、准确,不要让邮件内容与用户想要的内容不符;

2、邮件标题要准确、简洁,并让用户容易理解邮件的内容;

3、控制邮件发送频率,不要让用户感到被骚扰;

4、遵守邮件发送规则,如设置正确的发件人、回复地址等。

接下来,为了验证,我们需要把验证码存入数据库:​​​​​​​

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO email_code (`email`,`code`) values ('$to','$code')";
if ($conn->multi_query($sql) === true) {
    //插入成功
}

数据库结构是这样的:

名称 说明
id 数据id,自增
email 邮箱
code 验证码
createDate 创建时间,默认当前时间

发送完成之后就需要验证了,我们需要验证对错和是否超时,新建validate.php文件:​​​​​​​

$email = $_REQUEST["email"];
$code = $_REQUEST["code"];

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT * FROM email_code WHERE email='$email'";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
    if($row["code"] == $code){
        $createDate = $row["createDate"];

        date_default_timezone_set('Asia/Shanghai');


        $currentDate = date('Y-m-d H:i:s');

        $res = strtotime($currentDate) - strtotime($createDate);

        if($res < 5*60){
            //验证成功,登录逻辑

            //使用完的验证码进行删除
            $sql2 = "DELETE FROM email_code WHERE email='$email'";
            if ($conn->multi_query($sql2) === true) {
            // 删除成功
            }
        }else{
            //超时
        }
    }
}

你可能感兴趣的:(PHP,数据库,sql,php)