Я работал над классом в PHP для отправки почты и решил использовать структуру Zend. Этот класс отправляет почту, используя пользовательскую конфигурацию SMTP. На данный момент я проверяю конфигурацию SMTP пользователя, используя предоставленные учетные данные пользователя, отправляю «фиктивное» электронное письмо на «фиктивный» адрес электронной почты и перехватываю класс ZendException
, который может быть выдан при ошибке. Это ужасный метод по многим причинам:
- Пользователь SMTP в конечном итоге забанен за подозрение в «рассылке спама» (GMail)
- Неэффективно и требует много времени
- Неудачная попытка доставки электронной почты находится в почтовом ящике пользователя
Ниже приведен пример того, что я сейчас делаю, чтобы проверить правильность конфигурации SMTP:
public function validSMTP () {
// Get the user's SMTP configuration
$config = $this->getConfiguration ();
// Create a new Zend transport SMTP object
$transport = new Zend_Mail_Transport_Smtp ( $config ["hostname"], [
"auth" => "login",
"ssl" => $config ["protocol"],
"port" => $config ["port"],
"username" => $config ["from"],
"password" => $config ["password"]
]);
// Create a new message and send it to dummy email
$mail = new Zend_Mail ("UTF-8");
$mail->setBodyText ( "null" );
$mail->setFrom ( $config ["from"] );
$mail->addTo ( "[email protected]" );
$mail->setSubject ( "Test" );
// Attempt to send the email
try {
// Send the email out
$mail->send ( $transport );
// If all is well, return true
return true;
}
// Catch all Zend exceptions
catch ( Zend_Exception $exception ) {
// Invalid configuration
return false;
}
}
Итак, мой вопрос: есть ли лучший способ сделать это? Есть ли в Zend_Mail такая встроенная функция? Я просмотрел все и не смог найти ничего встроенного в Zend_Mail. Заранее спасибо тому, кто ответит!