CodeIgniter: SSL / TLS SMTP Auth Email от PHPMailer Code - PullRequest
2 голосов
/ 10 октября 2011

Я пытаюсь использовать Класс электронной почты CodeIgniter для написания защищенной электронной почты SMTP; или SSL или TLS (предпочтительно). В прошлом я успешно использовал PHPMailer с Secure Auth и TLS. Я считаю, что это было безопасное соединение. TLS отображается в заголовке письма.

Поддерживает ли класс электронной почты CodeIngiters безопасную SMTP-аутентификацию с использованием TLS?

Обратите внимание, это не вопрос Gmail. Я пытаюсь использовать его с MS Exchange Server. Я подтвердил, что приведенный ниже код PHPMailer работает правильно.

include_once('includes/class.phpmailer.php');
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->Host = 'www.domain.com';

$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Port     = '25';
$mail->Timeout  = '60';

$mail->Username = 'user@domain.com';
$mail->Password = 'password';

$mail->From     = 'alerts@domain.com';
$mail->FromName = 'Alerts';

$mail->Subject  = 'Test from test email file.';
$mail->IsHTML(true);
$mail->MsgHTML('This is just a test.');

// To
$mail->AddAddress('alerts@domain.com', 'Research');
$result = $mail->Send();

С CodeIgniter я уже расширил класс электронной почты (MY_Email.php). Класс немного большой, чтобы размещать здесь. Но вот ошибка, которую я продолжаю получать.

Настройки:

array(7) { 
["smtp_host"]=> string(26) "tls://www.domain.com" 
["smtp_port"]=> string(2) "25" 
["smtp_user"]=> string(17) "alerts@domain.com" 
["smtp_pass"]=> string(9) "password" 
["smtp_to_email"]=> string(26) "user@domain.com" 
["smtp_from_email"]=> string(26) "user@domain.com" 
["smtp_from_name"]=> string(24) "Test from Application" 
}

Сообщение об ошибке:

fsockopen (): операция SSL не выполнена с кодом 1. OpenSSL Сообщения об ошибках: ошибка: 1408F10B: процедуры SSL: func (143): причина (267)

Есть идеи, что такое причина 267?

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

На форумах CI найдено решение.

Патч класса электронной почты Exchange http://codeigniter.com/forums/viewthread/158882/

Инициируется TLS после подключения SMTP-сервера.

Работал на меня.Джефф

2 голосов
/ 10 октября 2011

Как диагностировать ошибки OpenSSL:

Посмотрите на сообщение об ошибке:

error:1408F10B:SSL routines:func(143):reason(267)

Возьмите код причины (267) и определите ошибку:

grep 267 /usr/include/openssl/ssl.h
/usr/include/openssl/ssl.h:#define SSL_R_WRONG_VERSION_NUMBER                    267

Теперь Google для SSL_R_WRONG_VERSION_NUMBER

Прочитайте первый хит: http://www.mail-archive.com/openssl-dev@openssl.org/msg02770.html

"
    Many of SSL clients sends the first CLIENT HELLO with
    ssl2 format (0x80.....) because they don't know what
    version the server supports.
    In this first message, the client sends the version
    he wants to use (3 for SSL3), then the other exchanged
    messages are in the appropriate format SSL3 for V3,
    SSL2 for V2 etc....

    So in your server method configuration you must put:
      SSL_CTX *ctx = SSL_CTX_new (SSLv23_server_method())
    to correctely analyse the first client_hello message
    instead of 
      SSL_CTX *ctx = SSL_CTX_new (SSLv3_server_method())
    which i suppose you did.
"

Вывод: smtp-сервер использует SSLv3_server_method и поэтому должен быть исправлен для использования SSLv23.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...