para - Envío de correo electrónico con PHP desde un servidor SMTP
php mail smtp (6)
$from = "[email protected]";
$headers = "From:" . $from;
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers);
Tengo problemas para enviar correos electrónicos en PHP. Aparece un error: SMTP server response: 530 SMTP authentication is required
.
Tenía la impresión de que puede enviar correos electrónicos sin SMTP para verificar. Sé que este correo se filtrará probablemente, pero eso no importa en este momento.
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = [email protected]
Esta es la configuración en el archivo php.ini
. ¿Cómo debo configurar SMTP? ¿Hay algún servidor SMTP que no requiera verificación o debo configurar un servidor?
Aquí hay una manera de hacerlo con PHP PEAR
// Pear Mail Library
require_once "Mail.php";
$from = ''<[email protected]>''; //change this to your email address
$to = ''<[email protected]>''; // change to address
$subject = ''Insert subject here''; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail
$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]'', //your gmail account
''password'' => ''snip'' // your password
));
// Send the mail
$mail = $smtp->send($to, $headers, $body);
Si usa gmail smtp, recuerde habilitar SMTP en su cuenta de gmail, en la configuración
Cuando envía un correo electrónico a través de un servidor que requiere autenticación SMTP, realmente necesita especificarlo y configurar el host, el nombre de usuario y la contraseña (y tal vez el puerto si no es el predeterminado - 25).
Por ejemplo, suelo usar PHPMailer con configuraciones similares a esta:
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = ''UTF-8'';
$mail->Host = "mail.example.com"; // SMTP server example
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP port for the GMAIL server
$mail->Username = "username"; // SMTP account username example
$mail->Password = "password"; // SMTP account password example
Puede encontrar más acerca de PHPMailer aquí: https://github.com/PHPMailer/PHPMailer
El problema es que la función PHP mail()
tiene una funcionalidad muy limitada. Hay varias formas de enviar correos de PHP.
-
mail()
usa el servidor SMTP en su sistema. Hay al menos dos servidores que puede usar en Windows: hMailServer y xmail . Pasé varias horas configurándolas y sacándolas. El primero es más simple en mi opinión. En este momento, hMailServer está trabajando en Windows 7 x64. -
mail()
usa el servidor SMTP en una máquina remota o virtual con Linux. Por supuesto, el servicio de correo real como Gmail no permite la conexión directa sin credenciales o claves. Puede configurar una máquina virtual o usar una ubicada en su LAN. La mayoría de las distribuciones de linux tienen un servidor de correo listo para usar. Configúralo y diviértete. Utilizo exim4 por defecto en Debian 7 que escucha su interfaz LAN. - Las bibliotecas de correo usan conexiones directas. Las Libs son más fáciles de configurar. Utilicé SwiftMailer y envía perfectamente el correo desde la cuenta de Gmail. Creo que PHPMailer es bastante bueno también.
No importa cuál sea tu elección, te recomiendo que uses una capa de abstracción. Puede usar la biblioteca PHP en su máquina de desarrollo con Windows y simplemente la función mail()
en la máquina de producción con Linux. La capa de abstracción le permite intercambiar los controladores de correo dependiendo del sistema en el que se ejecuta su aplicación. Cree MyMailer
clase o interfaz MyMailer
abstracta con el método abstracto send()
. Heredar dos clases MyPhpMailer
y MySwiftMailer
. Implementar el método send()
de manera apropiada.
Hay algunos servidores SMTP que funcionan sin autenticación, pero si el servidor requiere autenticación, no hay forma de eludir eso.
Las funciones de correo integradas de PHP son muy limitadas, especificando que el servidor SMTP solo es posible en WIndows. En * nix, mail()
usará los binarios del sistema operativo.
Si desea enviar un correo electrónico a un servidor SMTP arbitrario en la red, considere usar una biblioteca como SwiftMailer . Eso le permitirá usar, por ejemplo, los servidores salientes de Google Mail.
Para los usuarios de Unix, mail () usa el comando Sendmail para enviar correos electrónicos. En lugar de modificar la aplicación, puede cambiar el entorno. msmtp es un cliente SMTP con sintaxis CLI compatible con Sendmail, lo que significa que se puede usar en lugar de Sendmail. Solo requiere un pequeño cambio en tu php.ini.
sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"
Entonces incluso la función lowly mail () puede funcionar con bondad SMTP. Es muy útil si intentas conectar una aplicación existente a servicios de correo como sendgrid o mandrill sin modificar la aplicación.
<?php
ini_set("SMTP", "aspmx.l.google.com");
ini_set("sendmail_from", "[email protected]");
$message = "The mail message was sent with the following mail setting:/r/nSMTP = aspmx.l.google.com/r/nsmtp_port = 25/r/nsendmail_from = [email protected]";
$headers = "From: [email protected]";
mail("[email protected]", "Testing", $message, $headers);
echo "Check your email now....<BR/>";
?>
O