Enviar correo usando un servidor SMTP con PHP

Author Description

F. Javier Carazo Gil

Casi Ingeniero Informático, co-fundador y administrador de Linux Hispano, además de desarrollar software y mantener sistemas en el CSIC, hace poco he fundado junto con Alberto Hornero una start-up: CODECTION donde trabajamos con software libre. Puedes saber más sobre mí, mi vida laboral, mis libros, mis artículos y mi día a día en @fjcarazo y en mi perfil público de LinkedIn.

  • Pingback: Bitacoras.com()

  • Sergio

    Aquí tienes otra API para enviar correos con PHP y, para mi gusto, mucho más potente.
    http://swiftmailer.org/

  • @Sergio: Gracias por el enlace, no conocía esa API y parece mucho más profesional por lo que veo. La tendré en cuenta a partir de ahora.

  • Deberías explicar mejor como integrarlo en un blog con WordPress.

    No se si es el sueño que tengo, pero no logro entenderlo.

  • @emslinux: Para integrarlo en WordPress puedes usar estos dos plugins:
    * El explicado en este post para usar Gmail o Google Apps
    * WP Mail SMTP, para cualquiera

  • Hola,

    En mi blog tengo un par de publicaciones en las que se explica como agregar un formulario de contacto a wordpress y como configurar wordpress para enviar correos utilizando gmail como smtp server.

    Si integran las 2 cosas pueden enviar correos sin problemas, he probado los métodos en varios sitios web que he realizado y nunca me han presentado problemas.

    http://geniutrixone.wordpress.com/category/cms/wordpress/

    Saludos.

  • Maximin31

    Grande maestro, he buscado por todas partes y al fín pude enviar un mail gracias a tu post. te mereces un 100%. Saludos

  • Denis Orlando Portillo Anzoate

    Buenisimo !

  • Dkskywalker28

    a mi me da error al autenticar, Could not authenticate…. aun poniendolo a true

  • Dkskywalker28

    ya si, hay que añadir estas tres lineas para enviarlo desde gmail
    $mail->Mailer = ‘smtp’; $mail->Host = ‘ssl://smtp.gmail.com’; $mail->Port = 465;

    ahora m salta un error de conexion… ju

  • Prueba con esto a ver qué tal:
     $mail->SMTPAuth   = true;                  // Habilita la autenticación SMTP  $mail->SMTPSecure = “ssl”;                 // Establece el tipo de seguridad SMTP  $mail->Host       = “smtp.gmail.com”;      // Establece Gmail como el servidor SMTP  $mail->Port       = 465;                   // Establece el puerto del servidor SMTP de Gmail

  • Juan Ramón

    Muchas gracias por la información. Comentar que para descargar PHPMAiILER ahora tenemos que ir a: http://code.google.com/a/apache-extras.org/p/phpmailer/

  • zatu

    ¿Esto funciona para enviar correos usando solo cuentas de gmail o podemos usar cuentas de correo tipo nombre@dominio.com?

  • Raul IONESCU
  • deivis crisanto

    Hola estoy usando phpmailer con Exchenge en la configuracion estoy usando

    $smtp=podxxxxx.outlook.com
    puerto 587;
    SMTPSecure=”TLS”; mi archivo ejemplo es de la siguiente manera:

    IsSMTP();
    $mail->Host =”podxxxxx.outlook.com”;
    $mail->Port = 587;
    $mail->SMTPSecure=”TLS”;
    $mail->From =”deivis.crisanto@unas.edu.pe”;
    $mail->FromName =”Deivis”;
    $mail->Subject =”test”;
    $mail->AltBody =”test-envio correo.”;
    $mail->MsgHTML($body);
    $mail->AddAddress(“deivis.crisanto@unas.edu.pe”, “luis Crisanto”);
    $mail->SMTPAuth = true;
    $mail->Username =”deivis.crisanto@unas.edu.pe”;
    $mail->Password =”contraseña”;
    if(!$mail->Send()) {
    echo “Error enviando: ” .$mail->ErrorInfo;
    } else {
    echo “enviado!!”;
    }
    ?>

    al momento de correr el ejemplo me sale el siguiente error:

    Error enviando: The following From address failed: deivis.crisanto@unas.edu.pe : MAIL not accepted from server,530,5.7.1 Client was not authenticated
    SMTP server error: 5.7.1 Client was not authenticated
    SMTP server error: 5.7.1 Client was not authenticated

    por favor ayuda para poder solucionar el problema.

  • Buenas, todo parece indicar que hay un problema con la autenticación, revisa tu contraseña y tu nombre de usuario, a ver si es que en ese servidor no hace falta pasar el @dominio o algo así.

  • deivis crisanto

    Buenas tardes y gracias por la pronta respuesta.
    Tengo otra duda , cuando trabajo con un correo Gmail configurando el smtp al enviar un correo a gmail me funciona ok. pero cuando quiero enviar a un correo de hotmail o yahoo me sale el error:

    Error enviando: SMTP Error: The following recipients failed: usuario@hotmail.com

    SMTP server error: 5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient’s email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 s38si2768527yhp.64 – gsmtp

    //la linea de para en mi ejemplo.php ojo:solo cambio esta el destinatario puesto que para un correo a gmail me envía exitosamente.
    $mail->AddAddress(‘deivis.crisanto@unas.edu.pe’, ‘LUIS’);

    quisiera saber si esta si con el php mailer puedo enviar correos a otros dominios como por ejemplo yahoo.com, hotmail.com o midominio.com , desde un gmail gracias.

  • deivis crisanto cuando te conectas por SMTP a un servicio, puedes enviar a cualquier dominio independientemente de si es yahoo.com, hotmail.com o midominio.com. Deberías poder hacerlo sin problema.

    Pon las líneas en las que indicas remitente, porque en $mail->AddAddress(‘deivis.crisanto@unas.edu.pe’, ‘LUIS’); no veo problema, ¿hay algo diferente?

  • deivis crisanto

    Gracias francisco por tu respuesta ya logre que me funcione el script, pero me funciona con un correo en terra.com es extraño que no me funcione con gmail o mi correo institucional seguiré investigando gracias.

    Saludos.

  • ¿Quizás una restricción de tu servidor? Podrías preguntar a ver si te dan una respuesta.

  • Si no, mira también estas soluciones: http://freecode.com/projects/smtp4php que apunta aquí abajo a ver si así, si hay suerte.

  • Eduardo

    Muchas gracias!

  • David Rodriguez

    Muchas gracias Javier. LLevaba un tiempo con un problema con gmail y me lo ha solucionado. Un saludo

  • danipelon

    Un par de apuntes:

    – Si se usa el código del ejemplo con “copiar y pegar” hay que tener la precaución de sustituir las comillas (tanto las simples como las dobles) por las correspondientes para que funcione.

    – La versión oficial de PHPMailer está alojada en Github, no en sourceforge:

    https://github.com/Synchro/PHPMailer

    (danipelon)

  • Gracias por tu comentario he actualizado el contenido para que diga lo de GitHub (no lo sabía).

    Y gracias también por el otro apunte, siempre viene bien clarificar más.

  • marcos

    Hola!! Te comento trabajo en una Universidad y diseñé una Page, definí un Formulario de Consultas del Docente. El docente hace la solicitud le llega a un operador y este le reponde, ahora este operador quiere que cuando le llegue a El la solicitud le vaya también una copia a su Ayudante es decir otro mail. Esto se puede hacer? Me podrias ayudar te lo agraedcería. Te paso como tengo conf. el PHP:

    <?php

    if(isset($_POST['email']))
    {

    // Debes editar las próximas dos líneas de código de acuerdo con tus preferencias
    $email_to = "CORREOOPERADOR@SERVIDOR";
    $email_subject = "** Reserva Proyectores Docentes **";

    // Aquí se deberían validar los datos ingresados por el usuario
    if(!isset($_POST['first_name']) ||
    !isset($_POST['last_name']) ||
    !isset($_POST['aula']) ||
    !isset($_POST['dia']) ||
    !isset($_POST['horario']) ||
    !isset($_POST['carrera']) ||
    !isset($_POST['email']) ||
    !isset($_POST['telephone']) ||
    !isset($_POST['comments'])) {

    echo "Ocurrió un error y el formulario no ha sido enviado. “;
    echo “Por favor, vuelva atrás y verifique la información ingresada”;
    die();
    }

    $email_message = “Detalles del formulario de contacto:nn”;
    $email_message .= “Docente: ” . $_POST[‘first_name’] . “n”;
    $email_message .= “Elemento: ” . $_POST[‘last_name’] . “n”;
    $email_message .= “Aula: ” . $_POST[‘aula’] . “n”;
    $email_message .= “Día: ” . $_POST[‘dia’] . “n”;
    $email_message .= “Horario: ” . $_POST[‘horario’] . “n”;
    $email_message .= “Carrera: ” . $_POST[‘carrera’] . “n”;
    $email_message .= “E-mail: ” . $_POST[’email’] . “n”;
    $email_message .= “Teléfono: ” . $_POST[‘telephone’] . “n”;
    $email_message .= “Mensaje: ” . $_POST[‘comments’] . “nn”;

    // Ahora se envía el e-mail usando la función mail() de PHP
    $headers = ‘From: ‘.$email_from.”rn”.
    ‘Reply-To: ‘.$email_from.”rn” .
    ‘X-Mailer: PHP/’ . phpversion();
    @mail($email_to, $email_subject, $email_message, $headers);

    echo “¡El formulario se ha enviado con éxito!”;

    }
    ?>
    –Inicio–