Я использую Gmail SMTP для отправки электронной почты из веб-приложения, которое я написал с помощью CodeIgniter с PHP 5.3 без проблем до недавнего времени. Это фрагмент кода:
$config['protocol'] = 'smtp'; $config['smtp_host'] = $this->smtp_host; $config['smtp_port'] = $this->smtp_port; $config['smtp_user'] = $this->smtp_username; $config['smtp_pass'] = $this->smtp_password; $config['mailtype'] = $this->email_type; $config['newline'] = "\r\n"; $this->load->library('email', $config); $this->email->from($email_sender, $email_sender_name); $this->email->to($email_to); $this->email->subject($message_subject); $this->email->message($message_content); $result = $this->email->send();
Когда я использую "ssl://smtp.gmail.com"
качестве хоста и 465
качестве порта, я получил эту ошибку в журнале:
DEBUG - 2010-08-06 17:19:24 --> Email Class Initialized ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fsockopen(): unable to connect to ssl://smtp.googlemail.com:465 (Connection timed out) /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1652 DEBUG - 2010-08-06 17:19:45 --> Language file loaded: language/english/email_lang.php ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:19:45 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818
Я не знаю, связано ли это, но до того, как я обновил свой PHP в PHP 5.3
, тот же код работал нормально. Если это проблема межсетевого экрана или интернет-соединения, я все равно могу отправить электронное письмо с помощью gmail smtp в Thunderbird.
После того, как я смотрю на разных форумах, у меня есть советы для этого теста:
$ openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587 CONNECTED(00000003) depth=1 /C=US/O=Google Inc/CN=Google Internet Authority verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com i:/C=US/O=Google Inc/CN=Google Internet Authority 1 s:/C=US/O=Google Inc/CN=Google Internet Authority i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority --- Server certificate -----BEGIN CERTIFICATE----- ...cut... -----END CERTIFICATE----- subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com issuer=/C=US/O=Google Inc/CN=Google Internet Authority --- No client certificate CA names sent --- SSL handshake has read 1901 bytes and written 335 bytes --- New, TLSv1/SSLv3, Cipher is RC4-MD5 Server public key is 1024 bit Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : RC4-MD5 Session-ID: 2CA08CABBE21653238292DEDF30D119428970FAA284263C92480DA5283AFE013 Session-ID-ctx: Master-Key: B3F6D4423DC14E24E894D7AD7107B4A640839F2BF90233714EC5BF0D139611E65655902B50AEA3BD67373A21338526B0 Key-Arg : None Start Time: 1281086948 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate) --- 250 ENHANCEDSTATUSCODES
используя тот же инструмент для тестирования соединения ssl
дайте мне время ожидания:
$ openssl s_client -ssl2 -crlf -connect smtp.gmail.com:465 connect: Connection timed out connect:errno=110
Я пытаюсь использовать "tls://smtp.gmail.com"
как хост и 587
как порт в моем коде выше, но теперь я получаю это сообщение об ошибке:
DEBUG - 2010-08-06 17:26:10 --> Email Class Initialized ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1652 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fsockopen(): Failed to enable crypto /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1652 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fsockopen(): unable to connect to tls://smtp.googlemail.com:587 (Unknown error) /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1652 DEBUG - 2010-08-06 17:26:10 --> Language file loaded: language/english/email_lang.php ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fwrite() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1795 ERROR - 2010-08-06 17:26:10 --> Severity: Warning --> fgets() expects parameter 1 to be resource, boolean given /data/donny/Projects/workspace/codeigniter/libraries/Email.php 1818
ssl://smtp.gmail.com:465
tls
в PHP 5.3
? Если да, можете ли вы показать мне код, поэтому я могу поместить его в CodeIgniter и проверить его. Благодарю.
Если вы зашли на эту страницу с сайта Google.com, ища более подробную информацию об электронной почте Secure SMTP, ознакомьтесь с этим патчем на форумах CI.
http://codeigniter.com/forums/viewthread/158882/
Мой SMTP-провайдер (система Exchange) не принимает SSL-соединения и требует использования SMTP через TLS вместо этого (STARTTLS, RFC 3207). Вот небольшой патч к классу электронной почты, который добавляет поддержку для него. Это написано против 1.7.2. Если это полезно для других, вы можете включить его в будущую версию.
Использование: укажите параметры сервера как обычный SMTP-сервер (tcp: // имя_сервера, обычно порт 25 или 587). Включить новую настройку в config ($ config ['starttls'] = TRUE;)
Зависит от доступности TLS (т. Е. Перечислено в разделе «Зарегистрированные потоковые Socket Transports» в phpinfo ()).
Согласно документу PHP SSL и TLS были добавлены в версии 4.3.
http://de2.php.net/manual/de/function.fsockopen.php
Таким образом, они должны работать в целом.
Я нашел это, и это сработало для меня:
http://tareq.wedevs.com/2010/01/sending-mail-with-gmails-smtp-server-with-fsockopen/
Возможно, вы тоже можете попробовать этот сценарий.