可能的重复项:
md5 密码与 phpMailer
大家好,提前感谢您阅读本文。我以md5格式在我的数据库中存储了一个电子邮件帐户的密码。然后,当我使用以下代码通过phpMailer向网站管理员发送通知电子邮件时,我收到stmp连接失败错误。没有 md5 加密的相同代码可以完美运行。
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $USR_EMAIL; // SMTP username
$mail->Password = md5($MAIL_PWD); // SMTP password
.
.
.
任何人都知道为什么不会发送带有md5密码的电子邮件?我应该把一些东西改成class.phpMailer吗?感谢您阅读本文
您似乎正在对密码进行双重哈希处理。正如你所说,它以 md5 格式存储在数据库中,然后你再次 md5 它,所以你实际上是在做:
$passwd = 'hello';
$mail->Password = md5(md5($passwd));
或
$mail->Password = $MAIL_PWD;
会工作。
但是,请注意,您通常无法将 md5 哈希发送到邮件服务器并使其工作。然后,服务器将对你发送的pasword文本进行自己的散列/加密,密码的md5与实际密码有很大不同。您需要发送密码的真实原始文本,而不是散列版本。
您说数据库中的密码以MD5格式存储。如果我再看一下你现在做的流程是:
数据库(MD5中的密码)-> PHP代码(密码转换为MD5)(访问SMTP)
在你这样做的时候:转换为MD5,你实际上这样做:md5(md5("密码"))。如果我在我的终端中这样做,我会得到:
localhost:~ user$ md5 -s password
MD5 ("password") = 5f4dcc3b5aa765d61d8327deb882cf99
localhost:~ user$ md5 -s 696d29e0940a4957748fe3fc9efd22a3
MD5 ("5f4dcc3b5aa765d61d8327deb882cf99") = 696d29e0940a4957748fe3fc9efd22a3
如果不是这种情况,那么如果PHPMailer源代码已经转换为MD5,则可以尝试在PHPMailer源代码中查看该密码方法。也许它也在类/对象中设置以选择要使用的哈希方法?