formulario - enviar email php smtp
Enviar correo electrónico utilizando el servidor GMail SMTP desde una página PHP (13)
Estoy intentando enviar un correo electrónico a través del servidor SMTP de GMail desde una página de PHP, pero recibo este error:
fallo de autenticación [SMTP: el servidor SMTP no admite autenticación (código: 250, respuesta: mx.google.com a su servicio, [98.117.99.235] TAMAÑO 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]
¿Alguien puede ayudar? Aquí está mi código:
<?php
require_once "Mail.php";
$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,/n/nHow are you?";
$host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$password = "testtest";
$headers = array (''From'' => $from,
''To'' => $to,
''Subject'' => $subject);
$smtp = Mail::factory(''smtp'',
array (''host'' => $host,
''port'' => $port,
''auth'' => true,
''username'' => $username,
''password'' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
Al usar Swift mailer , es muy fácil enviar un correo a través de las credenciales de Gmail:
<?php
require_once ''swift/lib/swift_required.php'';
$transport = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 465, "ssl")
->setUsername(''GMAIL_USERNAME'')
->setPassword(''GMAIL_PASSWORD'');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance(''Test Subject'')
->setFrom(array(''[email protected]'' => ''ABC''))
->setTo(array(''[email protected]''))
->setBody(''This is a test mail.'');
$result = $mailer->send($message);
?>
Conjunto
''auth'' => false,
También, ver si el puerto 25 funciona.
El código que figura en la pregunta necesita dos cambios.
$host = "ssl://smtp.gmail.com";
$port = "465";
El puerto 465 es necesario para una conexión SSL.
Enviar correo usando la biblioteca phpMailer a través de Gmail Descargue los archivos de la biblioteca desde Github
<?php
/**
* This example shows settings to use when sending via Google''s Gmail servers.
*/
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don''t have access to that
date_default_timezone_set(''Etc/UTC'');
require ''../PHPMailerAutoload.php'';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = ''html'';
//Set the hostname of the mail server
$mail->Host = ''smtp.gmail.com'';
// use
// $mail->Host = gethostbyname(''smtp.gmail.com'');
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = ''tls'';
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "[email protected]";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom(''[email protected]'', ''First Last'');
//Set an alternative reply-to address
$mail->addReplyTo(''[email protected]'', ''First Last'');
//Set who the message is to be sent to
$mail->addAddress(''[email protected]'', ''John Doe'');
//Set the subject line
$mail->Subject = ''PHPMailer GMail SMTP test'';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents(''contents.html''), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = ''This is a plain-text message body'';
//Attach an image file
$mail->addAttachment(''images/phpmailer_mini.png'');
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
Gmail requiere el puerto 465, y también es el código de phpmailer :)
No recomiendo Pear Mail. No se ha actualizado desde 2010. También lea los archivos de origen; El código fuente está casi desactualizado, escrito en estilo PHP 4 y se han publicado muchos errores / errores (Google it). Estoy usando Swift Mailer.
Swift Mailer se integra en cualquier aplicación web escrita en PHP 5, ofreciendo un enfoque flexible y elegante orientado a objetos para enviar correos electrónicos con una multitud de características.
Envíe correos electrónicos utilizando SMTP, sendmail, postfix o una implementación de transporte personalizada por su cuenta.
Servidores de soporte que requieren nombre de usuario y contraseña y / o cifrado.
Protéjase de los ataques de inyección de cabecera sin eliminar el contenido de solicitud de datos.
Enviar correos electrónicos compatibles con MIME HTML / multiparte.
Utilice complementos controlados por eventos para personalizar la biblioteca.
Maneja archivos adjuntos grandes e imágenes en línea / incrustadas con poco uso de memoria.
Es un código abierto y gratuito que puede descargar Swift Mailer y cargar en su servidor. (La lista de características se copia del sitio web del propietario).
El ejemplo de trabajo de Gmail SSL / SMTP y Swift Mailer está aquí ...
// Swift Mailer Library
require_once ''../path/to/lib/swift_required.php'';
// Mail Transport
$transport = Swift_SmtpTransport::newInstance(''ssl://smtp.gmail.com'', 465)
->setUsername(''[email protected]'') // Your Gmail Username
->setPassword(''my_secure_gmail_password''); // Your Gmail Password
// Mailer
$mailer = Swift_Mailer::newInstance($transport);
// Create a message
$message = Swift_Message::newInstance(''Wonderful Subject Here'')
->setFrom(array(''[email protected]'' => ''Sender Name'')) // can be $_POST[''email''] etc...
->setTo(array(''[email protected]'' => ''Receiver Name'')) // your email / multiple supported.
->setBody(''Here is the <strong>message</strong> itself. It can be text or <h1>HTML</h1>.'', ''text/html'');
// Send the message
if ($mailer->send($message)) {
echo ''Mail sent successfully.'';
} else {
echo ''I am sure, your configuration are not correct. :('';
}
Espero que esto ayude. Feliz codificación ... :)
Para instalar Mail.php de PEAR en Ubuntu, ejecute el siguiente conjunto de comandos:
sudo apt-get install php-pear
sudo pear install mail
sudo pear install Net_SMTP
sudo pear install Auth_SASL
sudo pear install mail_mime
Su código no parece estar usando TLS (SSL), que es necesario para entregar correo a Google (y usar los puertos 465 o 587) .
Puedes hacerlo configurando
$host = "ssl://smtp.gmail.com";
Su código se parece sospechosamente a este ejemplo que se refiere a ssl: // en el esquema de nombre de host.
Tengo una solución para cuentas GSuite que no tiene el sufijo "@ gmail.com". También creo que funcionará para cuentas GSuite con @ gmail.com pero no lo he intentado. Primero debe tener los privilegios para cambiar la opción "todas las aplicaciones menos seguras" para su cuenta GSuite. Si tiene los privilegios (puede verificar la configuración de la cuenta -> seguridad), entonces tiene que desactivar la "autenticación de factor de dos pasos", vaya al final de la página y establezca "sí" para permitir aplicaciones menos seguras. Eso es todo. Si no tiene privilegios para cambiar esas opciones, la solución para este hilo no funcionará. Consulte https://support.google.com/a/answer/6260879?hl=en para realizar cambios en la opción "permitir menos ...".
Yo también tuve este problema. Establecí la configuración correcta y habilité aplicaciones menos seguras, pero aún así no funcionó. Finalmente, habilité este https://accounts.google.com/UnlockCaptcha , y funcionó para mí. Espero que esto ayude a alguien.
SwiftMailer puede enviar correo electrónico utilizando servidores externos.
Aquí hay un ejemplo que muestra cómo usar un servidor de Gmail:
require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";
//Connect to localhost on port 25
$swift =& new Swift(new Swift_Connection_SMTP("localhost"));
//Connect to an IP address on a non-standard port
$swift =& new Swift(new Swift_Connection_SMTP("217.147.94.117", 419));
//Connect to Gmail (PHP5)
$swift = new Swift(new Swift_Connection_SMTP(
"smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS));
<?php
date_default_timezone_set(''America/Toronto'');
require_once(''class.phpmailer.php'');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$body = "gdssdh";
//$body = eregi_replace("[/]",'''',$body);
$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host = "ssl://smtp.gmail.com"; // SMTP server
$mail->SMTPDebug = 1; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = "[email protected]"; // GMAIL username
$mail->Password = "password"; // GMAIL password
$mail->SetFrom(''[email protected]'', ''PRSPS'');
//$mail->AddReplyTo("[email protected]'', ''First Last");
$mail->Subject = "PRSPS password";
//$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$address = "[email protected]";
$mail->AddAddress($address, "user2");
//$mail->AddAttachment("images/phpmailer.gif"); // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>
// Pear Mail Library
require_once "Mail.php";
$from = ''<[email protected]>'';
$to = ''<[email protected]>'';
$subject = ''Hi!'';
$body = "Hi,/n/nHow are you?";
$headers = array(
''From'' => $from,
''To'' => $to,
''Subject'' => $subject
);
$smtp = Mail::factory(''smtp'', array(
''host'' => ''ssl://smtp.gmail.com'',
''port'' => ''465'',
''auth'' => true,
''username'' => ''[email protected]'',
''password'' => ''passwordxxx''
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo(''<p>'' . $mail->getMessage() . ''</p>'');
} else {
echo(''<p>Message successfully sent!</p>'');
}