我使用php mailer成功发送电子邮件重置密码。在我提供的电子邮件内容中,单击链接以重置密码。该链接实际上将在我的服务器中的reset_password.php页面。我也想暂时传递电子邮件ID,在链接中可以通过reset_password.php页面检索..
<?php
session_start();
$email2=$_SESSION['emailto'];
?>
<p>Click on the following link to reset your password.<a href="http://sample-site.com/reset_password.php?email=<?php echo $email2;?>">Login</a>.</p>
以上行位于reset_password.php页面,我在下面的发送电子邮件的页面中包含它:
$mail->msgHTML(file_get_contents('email-content.php'), dirname(__FILE__));
如何通过电子邮件发送的链接中反映出变量$ email2值的价值?
$mail->msgHTML
可以包含php变量吗?
我试过这样的事,但没有帮助。
$mail -> msgHTML(str_replace($email3, $email2, file_get_contents('email-content.php')), dirname(__FILE__));
AND HTML
<p>Click on the following link to reset your password.<a href="http://localhost/reset_password.php?email=<?php echo $email3;?>">Reset Password</a>.</p>
这就是我在点击链接时在浏览器URL中看到的内容。
http://sample-site.com/reset_password.php?email=%3C?php%20echo%20$email3;?%3E
答案 0 :(得分:2)
file_get_contents()是原始文件读取,因此不会执行php标记。 你应该做的是将你的email-content.php改为
<p>Click on the following link to reset your password.<a href="http://localhost/reset_password.php?email={EMAIL}">Reset Password</a>.</p>
然后将邮件更改为
$mail -> msgHTML(str_replace('{EMAIL}', $email2, file_get_contents('email-content.php')), dirname(__FILE__));
===============================================
你最好为授权添加一些验证,即
<p>Click on the following link to reset your password.<a href="http://localhost/reset_password.php?email={EMAIL}&token={TOKEN}">Reset Password</a>.</p>
和邮件
$mail -> msgHTML(str_replace(
array('{EMAIL}','{TOKEN}'),
array($email2,md5($email2.'salt')),
file_get_contents('email-content.php')), dirname(__FILE__));
reset_password.php中的验证
if($_GET['token']!=md5($_GET['email'].'salt'))exit('Token invalid');
答案 1 :(得分:0)
您应该使用令牌(每个忘记密码请求的随机唯一令牌),而不是在网址中传递电子邮件。
为此,您需要在用户名为token
的表中创建一个添加字段,并且每当用户忘记密码时,创建一个令牌并使用生成的令牌更新该用户行。
你可以简单地在url中传递该令牌,如下所示:
http://sample-site.com/reset_password.php?token=yourtoken
当用户点击此网址到达目标网页时,您可以获得$_GET['token']
之类的令牌,并查询您的Users
表以检查令牌是否有效,并执行相应的任务需要的。
注意:确保对$_GET['token']
进行整形或使用预备声明。
但是,如果你想从网址收到电子邮件,可以这样说,$_GET['email']
答案 2 :(得分:0)
$mail ->msgHTML
实际上将PHP变量作为字符串传递。因此必须使用str_replace来传递PHP变量以反映在这样的链接上。
$mail ->msgHTML(str_replace('[email_here]', $email2, file_get_contents('email-content.php')), dirname(__FILE__));
在HTML页面中,
<p>Click on the following link to reset your password.<a href="http://localhost/reset_password.php?email=[email_here]">Reset Password</a>.</p>
有效!