1

我使用以下代码...

      $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

我想问一些简单的问题.. 有没有办法向 phpMailer 传递一个以 md5 格式保存在数据库中的密码?phpMailer 是否支持任何其他类型的散列?是否有支持散列密码的发送电子邮件 php 脚本?我很害怕我会在任何地方存储一个没有某种加密的电子邮件密码..

4

2 回答 2

6

您必须将纯密码发送到 SMTP。散列函数是单向的,它们只是“混淆”输入,因此 SMTP 无法使用它对您进行身份验证。

您可以加密密码,可能是 AES,然后存储密文和秘密(可能作为环境变量),并将解码后的通行证传递给邮件程序。

例子:

<?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
?>
于 2012-06-20T11:59:09.513 回答
3

不幸的是,这不是 phpMailer 的支持问题,而是您的 SMTP 设置问题。在大多数情况下,您的 SMTP 服务器不知道如何处理密码散列 - 它需要未散列的密码,以便它可以检查自己的密码表,无论如何这些密码表不太可能存储在未加盐的 MD5 中。

您可以(如果您的 SMTP 服务器支持)通过安全连接发送密码(请参阅PHPMailer:SMTP 错误:无法连接到 SMTP 主机以了解有关此问题的讨论)。但是,您仍然需要在未加密的情况下保存密码。根据您的托管程序包,一种替代方法是设置 SMTP,使其不通过用户名和密码对您进行身份验证——例如,通过使用正确配置的本地 sendmail 实例。

于 2012-06-20T11:58:07.377 回答