我使用以下代码......
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $USR_EMAIL; // SMTP username
$mail->Password = $MAIL_PWD; // SMTP password
我想问一些简单的问题.. 有没有办法将数据库中以md5格式保存的密码传递给phpMailer? 是否还有phpMailer支持的其他类型的哈希? 是否有支持哈希密码的发送邮件php脚本? 我很害怕我的电子邮件密码存储在任何地方都没有加密......
答案 0 :(得分:4)
您必须向SMTP发送纯密码。散列函数是单向的,它们只是“混淆”输入,因此SMTP无法使用它对您进行身份验证。
您可以加密密码,可能是AES,然后存储密文和密码(可能是env。变量),并将解码后的密码传递给邮件程序。
示例:
<?php
$secret_key = 'supersecret key';
$password = 'somepass';
// encrypt
// calculate cipher, and store somewhere
$cipher = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secret_key, $password, MCRYPT_MODE_ECB);
// use the cipher
$mail->Username = $USR_EMAIL; // SMTP username
$mail->Password = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secret_key, $cipher, MCRYPT_MODE_ECB); // SMTP password
?>
答案 1 :(得分:3)
不幸的是,这不是phpMailer的支持问题,而是你的SMTP设置问题。在大多数情况下,您的SMTP服务器将不知道如何处理密码哈希 - 它需要使用未哈希的密码,以便它可以检查自己的密码表,这些密码表不太可能存储在未加盐的MD5中。
您可以(如果您的SMTP服务器支持它)通过安全连接发送密码(有关此问题的讨论,请参阅PHPMailer: SMTP Error: Could not connect to SMTP host)。但是,您仍然需要保存密码而不加密。根据您的托管包,一种替代方法是设置SMTP,使其不通过用户名和密码对您进行身份验证 - 例如,使用正确配置的本地sendmail实例。