Pull to refresh

Zend_Mail отправка писем через SMTP с аутентификацией

Reading time 2 min
Views 7.2K
Переделывал както один сайтик за горе-создателями и потребовалось мне отправлять почту через SMTP c аутентификацией.

Смотрим в руководство на сайте зенда http://framework.zend.com/manual/ru/zend.mail.smtp-authentication.html
и видим: "… на данный момент SMTP-аутентификация не поддерживается" :(

Что же делать?

Отлично осознавая что документация на сайте устаревает раньше, да и свежая версия фреймворка вышла совсем недавно, смотрим в код.

И что же мы видим? Zend/Mail/Protocol/Smtp/Auth!!! УРА!

итак, результат:

config.ini (я храню конфиги в ini файле)

[mail]
host = mailhost.ru
port = 25
auth = login
username = smtpusername
password = smtppassword


в соответствии с рекомендацией мануала
«Чтобы отправить сообщение электронной почты через SMTP, нужно создать и зарегистрировать объект Zend_Mail_Transport_Smtp, прежде чем будет вызван метод send(). Для всех последующих вызовов Zend_Mail::send() в текущем скрипте будет использоваться SMTP»

index.php или bootstrap.php

$oConfig = new Zend_Config_Ini('config.ini');

/**
* Настройка почты. работаем через SMTP с авторизацией
*/
$tr = new Zend_Mail_Transport_Smtp( $oConfig->mail->host, $oConfig->mail->toArray() );
Zend_Mail::setDefaultTransport($tr);


здесь следует обратить внимание на второй параметр Zend_Mail_Transport_Smtp в соответствии с кодом это массив
/**
* Config options for authentication
*
* @var array
*/
protected $_config;

Zend_Mail_Transport_Smtp не может работать с обьектом конфигурации,
именно поэтому прихотится преобразовывать его toArray()

и там где нужно отправка просто шлем почту

$mail = new Zend_Mail( 'windows-1251' );
$mail->setBodyText('This is the text of the mail.');
$mail->setFrom('somebody@example.com', 'Some Sender');
$mail->addTo('somebody_else@example.com', 'Some Recipient');
$mail->setSubject('TestSubject');
$mail->send();
Tags:
Hubs:
+3
Comments 5
Comments Comments 5

Articles