如何从php邮件发送到php页面的电子邮件中检索电子邮件ID,名称等任何值?

时间:2015-06-11 03:05:43

标签: php email

我使用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

3 个答案:

答案 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>

有效!