2010-08-06 13 views
3

J'utilise Gmail SMTP pour envoyer des e-mails à partir de l'application Web que j'ai écrite en utilisant CodeIgniter avec PHP 5.3 sans problème jusqu'à récemment. Ceci est l'extrait de mon code:CodeIgniter et Gmail Timeout SMTP avec scoket SSL

$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(); 

Lorsque j'utilise "ssl://smtp.gmail.com" comme hôte et 465 que le port, je suis arrivé cette erreur dans le journal:

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 

Je ne sais pas si ce lié, mais avant de mettre à jour mon PHP en PHP 5.3, le même code fonctionnait très bien. Si c'est le pare-feu ou les problèmes de connexion Internet, je peux toujours envoyer un courriel en utilisant smtp gmail dans Thunderbird.

Après la recherche dans divers forums, je me suis un conseils pour faire ce test:

$ 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 

tout en utilisant même outil pour tester ssl connexion me donner délai d'attente:

$ openssl s_client -ssl2 -crlf -connect smtp.gmail.com:465 
connect: Connection timed out 
connect:errno=110 

J'essaie d'utiliser "tls://smtp.gmail.com" comme hôte et 587 comme port dans mon code ci-dessus, mais maintenant je reçois ce message d'erreur:

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 
  1. Pouvez-vous me aider à trouver ce que la cause de temps de connexion lorsque je suis essaie de se connecter à ssl://smtp.gmail.com:465
  2. En second lieu, puis-je utiliser tls dans PHP 5.3? Si oui, vous pouvez me montrer le code, donc je peux mettre dans CodeIgniter et le tester.

Merci.

Répondre

0

Selon le document PHP, SSL et TLS ont été ajoutés dans la version 4.3.

http://de2.php.net/manual/de/function.fsockopen.php

, ils devraient travailler en général.

je trouve celui-ci et cela a fonctionné pour moi:

http://tareq.wedevs.com/2010/01/sending-mail-with-gmails-smtp-server-with-fsockopen/

Peut-être que vous pouvez essayer aussi que script.

+0

J'ai écrit dans ma question ci-dessus que le script a bien fonctionné dans mon localhost avant de passer à PHP 5.3. Le même script inchangé a également fonctionné dans mon hébergement dreamhost. CodeIgniter utilise en interne fsockopen, vous pouvez le voir à partir du message d'erreur de journal. –

1

Si vous venez sur cette page de Google.com à la recherche de plus de détails sur les e-mails SMTP sécurisés, consultez ce correctif sur les forums CI.

http://codeigniter.com/forums/viewthread/158882/

Mon fournisseur SMTP (système Exchange) n'accepte pas les connexions SSL et nécessite l'utilisation de SMTP sur TLS à la place (STARTTLS, RFC 3207). Voici un petit correctif pour la classe Email qui ajoute le support pour cela. Il est écrit contre 1.7.2. Si cela est utile à d'autres, vous pouvez l'intégrer dans une prochaine version.

Utilisation: Spécifiez les paramètres du serveur en tant que serveur SMTP standard (tcp: // nom_serveur, généralement le port 25 ou 587). Activer le nouveau paramètre dans config ($ config ['starttls'] = TRUE;)

Dépend de la disponibilité de TLS (c'est-à-dire, répertorié dans la section 'Registered Stream Socket Transports' de phpinfo()).

+0

Merci pour l'info. Je vais essayer quand j'ai le temps de faire des expériences dessus. –

+2

Avait le même problème et 'smtp_timeout' => 30, cela fonctionne parfaitement – user481610