2010-08-13 26 views
30

He usado PHPMailer en varios proyectos pero ahora estoy atascado. Me da el error:
SMTP Error: No se pudo conectar al host SMTP.
He intentado enviar correos electrónicos desde Thunderbird y ¡funciona! Pero no a través PHPMailer ... Aquí están los ajustes de Thunderbird:PHPMailer: Error SMTP: No se pudo conectar con el host SMTP

Nombre del servidor: mail.exampleserver.com
puerto: 587
Nombre de usuario: [email protected]
autenticación segura: No se
conexión seguridad: StartTLS

he comparado estos con el servidor en mi último proyecto en el que solía PHPMailer y eran:

Nombre del servidor: mail.exampleserver2.com
Puerto: 465
Nombre de usuario: [email protected]
autenticación segura: No se
Conexión de seguridad: SSL/TLS

Mi código PHP es:

$mail = new PHPMailer(); 
$mail->IsSMTP(); // send via SMTP 
$mail->Host = SMTP_HOST; // SMTP servers 
$mail->Port = SMTP_PORT; // SMTP servers 
$mail->SMTPAuth = true; // turn on SMTP authentication 
$mail->Username = SMTP_USER; // SMTP username 
$mail->Password = SMTP_PASSWORD; // SMTP password 
$mail->From = MAIL_SYSTEM; 
$mail->FromName = MAIL_SYSTEM_NAME; 
$mail->AddAddress($aSecuredGetRequest['email']); 
$mail->IsHTML(true); // send as HTML 

¿Dónde estoy equivocado?

+0

http://stackoverflow.com/questions/42471693/phpmailer-using-gmail-gives-error/42472146?noredirect=1#comment72085437_42472146 –

Respuesta

10

es su problema más probable es que esto

de seguridad de conexión: StartTLS Conexión de seguridad: SSL/TLS

Esos son 2 protocolos diferentes, ¿está utilizando la correcta, lo que a uno que está utilizando en Thunderbird necesita ser usado

intente configurar la variable:

// if you're using SSL 
$mail->SMTPSecure = 'ssl'; 
// OR use TLS 
$mail->SMTPSecure = 'tls'; 
4

no existe mail.exampleserver.com ??? , Si no tratar el siguiente código (que debe tener cuenta de Gmail)

$mail->SMTPSecure = "ssl"; 
$mail->Host='smtp.gmail.com'; 
$mail->Port='465'; 
$mail->Username = '[email protected]'; // SMTP account username 
$mail->Password = 'your gmail password'; 
$mail->SMTPKeepAlive = true; 
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->CharSet = 'utf-8'; 
$mail->SMTPDebug = 0; 
42

En mi caso fue una falta de soporte SSL en PHP que dio este error.

Así que permitió extensión = php_openssl.dll

$mail->SMTPDebug = 1; también dio a entender a esta solución.

Actualización 2017

$mail->SMTPDebug = 2;, consulte: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

+1

La activación de esta extensión de PHP (Opción de menú WAMP) era lo que necesitaba. Gracias. – jwinn

+0

Eres mi héroe. He estado luchando con correos electrónicos en mi servidor local durante horas, ¡pero esto resolvió todos mis problemas! –

+0

¡Me ha ahorrado mucho tiempo! – Bronek

0

tuve un problema similar. Instalé PHPMailer versión 1.72 que no está preparado para administrar conexiones SSL. La actualización a la última versión resolvió el problema.

6

Tuve un problema similar y descubrí que era la directiva de configuración openssl.cafile en php.ini que debía establecerse para permitir la verificación de pares seguros. Simplemente configúralo en la ubicación de un archivo de autoridad certificadora como el que puedes obtener al http://curl.haxx.se/docs/caextract.html.

Esta directiva es nueva a partir de PHP 5.6 por lo que esto me pilló desprevenido al actualizar desde PHP 5.5.

+0

Estoy en el mismo problema, usando PHP5.6 si pongo la verificación de pares establecida en falso en phpmailer los correos electrónicos van a la carpeta de spam, ¿Alguna idea de cómo puedo establecer la ruta del certificado? dónde obtener el certificado? en Debian 8 VPS –

+0

Thx. Para mí eso ha funcionado. Es decir: cd/etc/php5 && wget https://curl.haxx.se/ca/cacert.pem && echo "openssl.cafile = /etc/php5/cacert.pem" >>/etc/php5/apache2/php.ini –

33

Dado que estas preguntas aparecen en Google, me gustaría compartir aquí mi solución para el caso en que PHP acaba de actualizarse a la versión 5.6 (que tiene un comportamiento SSL más estricto).

El wiki PHPMailer tiene una sección sobre esto:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

La solución sugerida se incluye el siguiente fragmento de código:

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

Esto debería funcionar para PHPMailer 5.2.10 (y arriba).

Nota: Obviamente, y también como se sugiere en esa wiki, esta debería ser una solución temporal.

The correct fix for this is to replace the invalid, misconfigured or self-signed certificate with a good one.

+3

¡Usted señor, me salvó la vida! –

+2

Esta es la mejor respuesta para aquellos que luchan con el correo localhost y enfrentan problemas de autofirma. – andromeda

+0

Por alguna razón, funcionó –

2

Tuve el mismo problema y fue porque PHPMailer se dio cuenta de que el servidor admitía STARTTLS, por lo que intentó actualizar automáticamente la conexión a una conexión cifrada. Mi servidor de correo está en la misma subred que el servidor web dentro de mi red, que está detrás de nuestros firewalls de dominio, por lo que no estoy demasiado preocupado por el uso de encriptación (además, los correos electrónicos generados no contienen datos confidenciales).

Así que lo que seguí y lo hice fue cambiar el SMTPAutoTLS a falso en el archivo class.phpmailer.php.

/** 
* Whether to enable TLS encryption automatically if a server supports it, 
* even if `SMTPSecure` is not set to 'tls'. 
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. 
* @var boolean 
*/ 
public $SMTPAutoTLS = false; 
0

Dado que este es un error popular, consulte el PHPMailer Wiki en la resolución de problemas.

También este trabajó para mí

$mailer->Port = '587'; 
Cuestiones relacionadas