如何在php中发送包含密码详细信息的电子邮件?

如何在php中发送包含密码详细信息的电子邮件?,php,Php,假设一个用户忘记了他的密码,他想知道他的密码。他必须为他的安全问题提供答案。提供正确答案后,我希望php向用户的电子邮件地址发送一封电子邮件,并显示其密码 那么,我应该在php中进行哪些邮件配置,以便它与各个用户的许多电子邮件地址进行交互 好的,这是我的php.ini文件,我要更改什么?我正在Windows7Ultimate中使用WAMP2.0 [mail function] ; For Win32 only. SMTP = localhost smtp_port = 25 ; For Win

假设一个用户忘记了他的密码,他想知道他的密码。他必须为他的安全问题提供答案。提供正确答案后,我希望php向用户的电子邮件地址发送一封电子邮件,并显示其密码

那么,我应该在php中进行哪些邮件配置,以便它与各个用户的许多电子邮件地址进行交互

好的,这是我的php.ini文件,我要更改什么?我正在Windows7Ultimate中使用WAMP2.0

[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

如果不想以明文形式存储密码,则应将其散列

您可以向忘记密码的人发送一个带有一次性密钥的链接,他们可以使用该密钥更改密码

你可以用电子邮件

至于配置邮件服务器:如果您没有在Web服务器上运行SMTP服务器,您可以尝试使用ISP的SMTP服务器。


你做错了!永远不要以可恢复的格式(纯文本或加密)存储密码

不,不要给他发送密码。只需生成一封新邮件,甚至不以普通格式存储密码

从PHP发送电子邮件的最基本方式是使用
邮件
函数(),因此当他们请求发送电子邮件时,向他们发送电子邮件就像调用
邮件一样简单($user_email,'Reset Password','Visit.$Reset_url.'重置密码')


然而,正如大家已经发布的,以一种可以检索的方式存储密码是一个非常糟糕的主意。您需要做的是存储密码的散列(有关如何设置密码的演练,请参阅,这是一个非常重要的概念)。设置完成后,您需要让用户请求重置密码,并让系统生成一个唯一的代码对其进行身份验证,通过电子邮件将该代码发送给他们,然后让他们使用该代码设置新密码。一旦你存储了密码的散列,他们或其他人就永远无法恢复密码。

不要将用户密码存储为纯文本。这是一个非常糟糕的做法

正确的方法是对密码进行散列和加密。G通过
hash_hmac
函数:

hash_hmac('sha256', $password, $salt);
Salt可以是特定于特定用户的任何内容,例如他的电子邮件地址

登录时,您可以通过与创建(注册)新用户时相同的方式对输入的密码进行散列,然后将散列与数据库中的散列进行比较,来检查输入凭据的有效性


“我忘记我的密码”功能的最佳实践是生成通过电子邮件发送给用户的一次性链接。访问链接后,他可以设置新密码。在此之前,他的旧密码仍然有效。这可防止攻击者在应用程序的所有用户不知情的情况下重置其密码。

存储或发送普通密码总是错误的。我同意你必须发送一封包含忘记密码链接的电子邮件。但我相信你的问题主要是关于如何发送电子邮件。PHP邮件功能很棒。但您可以使用第三方库,如swift。

切勿通过电子邮件发送密码。你的密码必须安全地散列,这样就不可能找出密码是什么。好的,所以我会要求用户输入一个新密码。要做到这一点,我必须发送电子邮件确认。要让php发送电子邮件,我必须配置一些东西。我必须配置什么?必须在您的服务器上进行设置,如下所示:我没有使用Linux操作系统,因此无法使用此“sendmail\u path=/usr/sbin/sendmail”我看到了mail()的代码,我记得我尝试过一次,但它从未发送过电子邮件。好的。那么,如何在存储到数据库之前对密码进行散列?@deepz:
hash_hmac('sha256',$password,$salt)我的主要问题是关于在php.ini中设置邮件服务器,正如我前面提到的。太好了,谢谢你的链接。我得经历一下。但是现在,我真的需要配置php.ini您的概念非常棒。我要用它。谢谢你的提示:)顺便说一下,我设法破解了我的密码。该教程非常有用。我将使用mail()函数发送电子邮件,但问题是我的邮件无法发送。在php.ini中有什么我必须做的吗?如果是,我应该改变吗?我喜欢你的“忘记密码”功能。我会用这个:)