各位大家好,并提前感谢您阅读本文。 我以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吗?感谢您阅读本文
答案 0 :(得分:2)
看起来你的密码是双重的。正如你所说,它以md5格式存储在数据库中,然后再次md5,所以你实际上在做:
$passwd = 'hello';
$mail->Password = md5(md5($passwd));
也许
$mail->Password = $MAIL_PWD;
会奏效。
但是,请注意,您通常无法将md5哈希值发送到邮件服务器并使其正常工作。然后,服务器将对您发送的密码文本进行自己的散列/加密,密码的md5与实际密码有很大不同。您需要发送密码的REAL原始文本,而不是散列版本。
答案 1 :(得分:1)
您说数据库中的密码以MD5格式存储。如果我再看看你现在的流程是:
数据库(MD5中的密码) - > PHP代码(密码 转换为MD5 )(访问SMTP)
在你这样做的地方:转换为MD5你实际上是这样做的:md5(md5(“password”))。如果我在终端上这样做,我会得到:
localhost:~ user$ md5 -s password
MD5 ("password") = 5f4dcc3b5aa765d61d8327deb882cf99
localhost:~ user$ md5 -s 696d29e0940a4957748fe3fc9efd22a3
MD5 ("5f4dcc3b5aa765d61d8327deb882cf99") = 696d29e0940a4957748fe3fc9efd22a3
如果不是这种情况,那么可以尝试在PHPMailer源代码中查看密码方法,如果它已经转换为MD5。也许在类/对象中设置也可以选择使用什么散列方法?