it-swarm-es.com

enviar correo electrónico utilizando el servidor SMTP de Gmail a través de PHP Remitente

Me gustaría enviar un correo electrónico utilizando Gmail SMTP server a través de PHP Mailer .

este es mi código

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

if(!$mail->Send())
{
  echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
  echo "Message sent!";
}
?>

pero recibo este siguiente error

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

mi dominio es vatandesign.ir

68
Mohammad Masoudian
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

 if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
 } else {
    echo "Message has been sent";
 }

Este código de arriba ha sido probado y trabajado para mí.

Puede ser que necesites $mail->SMTPSecure = 'ssl';

También asegúrese de que no haya activado la verificación de dos pasos para esa cuenta, ya que eso también puede causar problemas.

ACTUALIZADO

Puede intentar cambiar $ mail-> SMTP a:

$mail->SMTPSecure = 'tls';

Vale la pena señalar que algunos servidores SMTP bloquean las conexiones. Algunos servidores SMTP no admiten conexiones SSL (o TLS).

125
andrew-caulfield

Así que resolví mi propio error de "falla de conexión SMTP" y quería publicar la solución en caso de que ayude a alguien más.

Utilicé el código EXACTO dado en el archivo gmail.phps de ejemplo de PHPMailer. Funcionó simplemente mientras estaba usando MAMP y luego recibí el error de conexión SMTP una vez que lo moví a mi servidor personal.

He leído todas las respuestas de desbordamiento de pila y toda la documentación de solución de problemas de PHPMailer dijo que no era un problema con PHPMailer. Que era un problema de configuración en el lado del servidor. Probé diferentes puertos (587, 465, 25), probé el cifrado 'SSL' y 'TLS'. Verifiqué que openssl estaba habilitado en mi archivo php.ini. Verifiqué que no había un problema con el firewall. Todo salido, y todavía nada.

La solución fue que tuve que quitar esta línea:

$mail->isSMTP();

Ahora todo funciona. No sé por qué, pero funciona. El resto de mi código se copia y pega del archivo de ejemplo PHPMailer.

26
Evan Butler

También vale la pena señalar que si tiene habilitada la autenticación de dos factores, deberá configurar una contraseña específica de la aplicación para usarla en lugar de la contraseña de su cuenta de correo electrónico.

Puede generar una contraseña específica de la aplicación siguiendo estas instrucciones: https://support.google.com/accounts/answer/185833

Luego establezca $mail->Password a la contraseña específica de su aplicación.

8
Tim Carr

Parece que su servidor no puede establecer una conexión con el servidor SMTP de Gmail. Aquí hay algunos consejos para solucionar este problema: 1) verifique si SSL está configurado correctamente en su PHP (el módulo que lo maneja no está instalado de manera predeterminada en PHP. Debe verificar su configuración en phph.ini). 2) verifique si su firewall permite llamadas salientes al puerto requerido (aquí 465 o 587). Usa telnet para hacerlo. Si el puerto no está abierto, entonces necesitará algún soporte de sysdmin para configurar la configuración. Espero que puedas resolver esto rápidamente!

5
Pr Shadoko

Abra este Enlace y seleccione siga las instrucciones Los servidores de Google bloquean cualquier intento de servidores desconocidos, así que una vez que haga clic en Captcha, comprobará que todo estará bien.

3
Yasin Hassanien

Google trata las cuentas de Gmail de forma diferente según la información de usuario disponible, probablemente para frenar a los spammers.

No pude usar SMTP hasta que hice la verificación del teléfono. Hice otra cuenta para volver a verificar y pude confirmarlo.

1
Forgot My Login 12
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

este código funciona bien para mí

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP Host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP Host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
0
Zohaib Hussain

Anderscc lo tiene correcto. Gracias. Funcionó para mí pero no al 100%.

Tuve que establecer

$ mail-> SMTPDebug = 0; Si lo establece en 1, puede causar errores, especialmente si está pasando algunos datos como json a la página siguiente. Ejemplo: realizar una verificación si se envía correo, utilizando json para pasar datos a través de ajax.

Tuve que bajar la configuración de seguridad de mi cuenta de Gmail para deshacerme de los errores: "Error de conexión SMTP ()" y "ERROR SMTP: Error del comando de contraseña"

Solución: Este problema puede ser causado por aplicaciones 'menos seguras' que intentan usar la cuenta de correo electrónico (esto es de acuerdo con la ayuda de Google, no estamos seguros de cómo juzgan qué es seguro y qué no) OR si está intentando iniciar sesión varias veces seguidas OR si cambia de país (por ejemplo, use VPN, mueva el código a un servidor diferente o intente iniciar sesión desde otra parte del mundo).

Enlaces que solucionan el problema (debe haber iniciado sesión en la cuenta de Google):

Nota: Puede ir al siguiente enlace de respuesta de stackoverflow para obtener una referencia más detallada.

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

Si está utilizando cPanel, solo debe hacer clic en el cuadro que le permite enviar a servidores externos mediante SMTP.

Inicie sesión en CPanel> Ajustes de Tweak> Todos> "Restringir SMTP salientes a root, exim y mailman (FKA SMTP Tweak)"

Como se responde aquí:

"Contraseña no aceptada del servidor: 535 Datos de autenticación incorrectos" al enviar con GMail y phpMailer

0
Tristanisginger