Я использую следующий код …
$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-скрипт электронной почты, который поддерживает хешированные пароли? Я в ужасе от идеи, что у меня будет почтовый пароль, хранящийся где угодно, без какого-либо шифрования.
Вы должны отправить простой пароль 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 ?>
К сожалению, это не вопрос поддержки в phpMailer, а настройки SMTP. В большинстве случаев ваш SMTP-сервер не будет знать, что делать с хэшем пароля – ему нужен неподдерживаемый пароль, чтобы он мог проверять свои собственные таблицы паролей, которые вряд ли будут храниться в несоленном MD5 в любом случае.
Вы можете (если ваш SMTP-сервер его поддерживает) отправить пароль через безопасное соединение (см. PHPMailer: Ошибка SMTP: не удалось подключиться к узлу SMTP для обсуждения этого вопроса). Однако вам все равно придется хранить пароль без шифрования. Одной из альтернатив этому, в зависимости от вашего пакета хостинга, является настройка SMTP таким образом, чтобы он не аутентифицировал вас по имени пользователя и паролю – например, с помощью правильно настроенного локального экземпляра sendmail.