servidor mail enviar correos correo con php email smtp phpmailer

enviar - phpmailer



La configuración SMTP no funciona en producción (11)

¿Cuál es la versión de phpmailer?

Puede olvidarse de agregar esta línea

$mail->IsSMTP(); // use SMTP

después de iniciar $ correo.

Pruebalo.

Intento enviar un correo electrónico cuando se envía un formulario. Estoy usando PHPMailer para enviar el correo utilizando la siguiente configuración.

$mail = new PHPMailer; $mail->isSMTP(); $mail->Host = ''mail.example.in''; $mail->Port = 25; $mail->SMTPAuth = true; $mail->Username = ''[email protected]''; $mail->Password = ''password''; $mail->setFrom("[email protected]" , "User"); $mail->addAddress(''[email protected]'', ''Receiver''); $mail->addBCC(''[email protected]'', ''Another user''); $mail->AddReplyTo(''[email protected]'', ''User''); $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $message; if($mail->send()) echo "Your request has been received. We will soon contact you."; else echo "Unable to send your request. Please try again";

Esto funciona bien en localhost. Pero cuando lo despliego en mi servidor (ejemplo.in) obtengo la siguiente excepción.

SMTP ERROR: Failed to connect to server: Connection timed out (110) SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

--EDITAR--

Intenté conectarme al servidor SMTP usando el comando telnet, pero no puedo agregar el destinatario. Me sale el siguiente error?

Last login: Fri Sep 16 11:08:06 on ttys000 admin:~ admin$ telnet mail.example.in 25 Trying 111.91.153.112... Connected to mail.example.in. Escape character is ''^]''. 220 fbs-ho-mailserver.example.in ESMTP Service (Lotus Domino Release 8.5.3FP3) ready at Fri, 16 Sep 2016 11:36:01 +0530 HELO example.in 250 fbs-ho-mailserver.example.in Hello example.in ([111.91.127.222]), pleased to meet you MAIL from: [email protected] 250 [email protected]... Sender OK RCPT to: [email protected] 554 Relay rejected for policy reasons.

- EDITAR -

Pude configurar esta cuenta en Outlook. Estoy realmente confundido de lo que está pasando.


El error de tiempo de espera es típico de los paquetes caídos, por lo que podría haber problemas de firewall entre el servidor web y el servidor SMTP. Si tienes acceso ssh a tu servidor, puedes intentar conectarte a smtp usando:

telnet <smtp server> 25

En el error de tiempo de espera, incluso con telnet, está bastante seguro de que el problema está en el lado de la red / firewall.


El problema, más bien los dos problemas no relacionados , que estás experimentando es bastante sencillo:

ERROR SMTP: Error al conectarse al servidor: se agotó el tiempo de espera de la conexión (110) SMTP connect () falló.

y ha verificado que el servidor acepta conexiones:

Intenté conectarme al servidor SMTP usando el comando telnet

Last login: Fri Sep 16 11:08:06 on ttys000 admin:~ admin$ telnet mail.example.in 25 Trying 111.91.153.112... Connected to mail.example.in.

Su secuencia de comandos no se puede conectar al servidor SMTP cuando se ejecuta desde su servidor de producción .

La causa probable es que el servidor de producción tenga un firewall que, para evitar el abuso, impida cualquier conexión con el exterior . El servidor puede servir solicitudes web, pero no más.

Si su prueba había verificado que el puerto 25 no respondía , entonces (después de verificar que la dirección del host era correcta) podría haber intentado telnet mail.example.in 587 en su lugar. Si eso funcionó, podría significar que el servidor no acepta conexiones inseguras (puerto 25) pero acepta conexiones seguras. Con PHPMailer, podrías haber intentado activar una conexión segura :

$mail->SMTPSecure = ''tls'';

o

$mail->SMTPSecure = ''ssl'';

Si eso no funciona, es posible que aún tenga un problema de firewall; o puede que necesite mirar phpinfo() y verificar que tiene soporte OpenSSL disponible en PHP.

Qué necesitas hacer

  • pregunte a la gente de TI que mantiene el servidor de producción para abrir el firewall;
  • más prometedor, pregúnteles cómo enviar correos electrónicos desde ese servidor. Lo más probable es que necesite usar la función mail() , o use localhost o 127.0.0.1 como servidor SMTP. Luego, los correos electrónicos se enviarán a través de la red de servicio de su servidor de producción.

Podrían decirle que el puerto 25 no está permitido, pero que el puerto (por ejemplo) 465 o 567 estaría permitido. Deberá actualizar su configuración y / o agregar TLS / SSL en consecuencia (ver arriba).

  • o puede que se le permita conectarse a un servidor SMTP de terceros del que tendrá que proporcionar la dirección IP para permitir que los técnicos de TI abran una ventana de firewall adecuada. Luego, los correos electrónicos se enviarán a través del servidor de terceros.

El segundo problema (posiblemente NO es un problema)

250 [email protected] ... Remitente Aceptar RCPT a: [email protected] 554 Retransmisión rechazada por motivos de política

Además, para evitar el abuso, los servidores SMTP no permitirán que todos se conecten y envíen correos electrónicos, sino solo sus propios clientes. Veo que en la configuración de PHPMailer, especificó un usuario y una contraseña. En la sesión de telnet no lo hiciste. Por lo tanto, es muy posible que PHPmailer pueda enviar, pero no conectarse, mientras su telnet puede conectarse, pero no enviar.

Una vez que resuelva el problema de conexión, su problema de autenticación se resolverá o desaparecerá (porque utilizará un servidor diferente que le proporcionarán los técnicos de TI, por ejemplo, el servidor localhost ).

El tercer problema (puede que nunca surja)

Una tercera forma de abusar de los servicios es el uso excesivo: enviar demasiados correos electrónicos a demasiadas personas. Verifique con los técnicos sobre las políticas aceptables para enviar correos electrónicos.

Problemas, problemas

Otras cosas a considerar son la credibilidad de la fuente (es posible que desee enviar correos electrónicos en nombre de algún dominio que no haya designado su servidor SMTP de elección como remitente permitido) y la confidencialidad de los datos (incluso con conexiones TLS / SSL) , si recibe localhost como servidor SMTP, sus técnicos de TI tendrán acceso completo, sin restricciones e indetectable a cualquier correo electrónico que envíe. Puede que no esté de acuerdo con eso.


Entonces tiene un servidor GoDaddy y desea enviar un correo electrónico a través de su Relé SMTP recién adquirido. Bueno, "no se puede" es probablemente lo que vas a encontrar si atormentas a Google.

Si hurgas un poco más, probablemente la solución oficial de GoDaddy sea usar su relevo de correo interno. Esto no es ideal, debido a las barreras arbitrarias que han establecido, como esta:

Nuestros servidores dedicados tienen un límite de correo electrónico de salida de 1000 por día. Si necesita enviar más de 1000 correos electrónicos por día, llame a Atención al cliente o abra un ticket de soporte para solicitar un límite superior.

Solución rápida y de trabajo: obtenga retransmisión SMTP que admita el envío de correos electrónicos mediante HTTP API.

Mi sugerencia: (Una solución de trabajo simple y efectiva, la estoy usando personalmente)

Regístrese para una cuenta en Sendgrid . Sendgrid proporciona 12k correos electrónicos gratuitos por mes, y creo que debería ser suficiente para cubrir cualquier necesidad básica.

Primer paso: Sendgrid le pedirá que agregue algunos registros DNS para autenticarlo para enviar correos electrónicos en nombre de ese host. Así que hazlo.

Segundo paso: Configurar White Lables https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html (Esto no es importante, pero le dará un aspecto profesional a los correos electrónicos que está enviando)

Tercer paso: generar claves de API

Puede administrar sus claves API desde SendGrid Customer Portal. Además, puedes administrar tus claves API a través de la API .

Cuarto paso: adelante y escribe nuestros códigos.

Enviar correos usando PHP en sendgrid usando esta library disponible en github es fácil:

// using SendGrid''s PHP Library // https://github.com/sendgrid/sendgrid-php require ''vendor/autoload.php''; $sendgrid = new SendGrid("SENDGRID_APIKEY"); $email = new SendGrid/Email(); $email->addTo("[email protected]") ->setFrom("[email protected]") ->setSubject("Sending with SendGrid is Fun") ->setHtml("and easy to do anywhere, even with PHP"); $sendgrid->send($email);

Cómo funciona esto

GoDaddy bloquea los puertos 25, 2525, 587 y 485, que son puertos ideales para SMTP. Así que estamos usando el puerto 80/443 y solicitamos a la API de sengrid que envíe el correo electrónico en nombre nuestro en nombre del puerto 80, y sí, engañamos a GoDaddy.


Necesita cambiar alguna configuración en su php.ini:

upload_max_filesize = 2M ;or whatever size you want max_execution_time = 60 ; also, higher if you must - sets the maximum time in seconds.

Si tu PHP.ini depende de tu entorno, más información: reference

O

Coloque esto en la parte superior de su script PHP y deje que su script se pierda

ini_set(''max_execution_time'', 600); //600 seconds = 10 minutes or set your time


No es una buena idea usar su propio SMTP. Dependiendo de lo que tenga que ver, tiene grandes posibilidades de bloquear sus mensajes de correo electrónico o marcarlos como SPAM. Y tendrá que pasar algunas veces para mantener su servidor actualizado.

Utilice los servicios en línea que figuran en la lista blanca para cada proveedor y que exponen API para enviar sus correos transaccionales: https://www.mailjet.com/ http://mailchimp.com/ ...

A menudo proponen una cuenta gratuita para un volumen pequeño (menos de 2000 correos electrónicos por día). Usar la API es bastante trivial y puede implementarse en algunos minutos (ej .: https://dev.mailjet.com/ )


Pregunte a su proveedor de hosting si smtp está habilitado y no está en ese servidor. Tuve el mismo problema antes de smtp y curl. Llame al proveedor de alojamiento.


Primera cita (de la comunidad ibm):

[email protected] era miembro de un grupo (Rechazar) que figuraba en el campo "Denegar mensajes destinados a las siguientes direcciones de Internet" de gmail.com (en el enrutador / SMTP del documento de configuración de Domino de destino, Restricciones y controles, Pestaña "Controles de destinatario previsto receptor" de la pestaña Controles entrantes SMTP).

Al eliminar el nombre jerárquico de Mary (Mary Jones / ABC) de la lista de miembros en el documento Rechazar (grupo), Mary puede recibir mensajes de Internet.

2da cita:

La mayoría de los servidores de correo, para evitar que se utilicen como retransmisiones de correo no deseado, están configurados solo para retransmitir correo de ciertos hosts.


Tengo tu punto. El mismo problema me pasa, acabo de agregar una línea y está funcionando para mí. por favor use ,

$mail->SMTPSecure = ''ssl'';

y configure su configuración de acuerdo con ssl. También compruebe correctamente la configuración del correo en su servidor.


Tu error dice:

SMTP ERROR: Failed to connect to server: Connection timed out (110) SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Echemos un vistazo a https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting :

"Error SMTP: no se pudo conectar al host SMTP".

Esto también puede aparecer cuando SMTP connect () falló o se llamó a Mail () sin estar conectado en la salida de depuración. Esto a menudo se informa como un problema de PHPMailer, pero casi siempre se debe a una falla local de DNS, bloqueo de firewall (por ejemplo, como lo hace GoDaddy) u otro problema en su red local. Significa que PHPMailer no puede contactar al servidor SMTP que ha especificado en la propiedad del Host, pero no dice exactamente por qué. También puede deberse a que no se haya cargado la extensión de openssl (consulte las notas de cifrado a continuación).

Algunas técnicas para diagnosticar el origen de este error se analizan a continuación.

Ve papi

El popular proveedor de alojamiento en Estados Unidos GoDaddy impone restricciones muy estrictas (hasta el punto de convertirse en casi inútiles) en el envío de correo electrónico. Bloquean SMTP saliente a los puertos 25, 465 y 587 a todos los servidores, excepto el suyo. Este problema es el tema de muchas preguntas frustrantes sobre . Si encuentra que su script funciona en su máquina local, pero no cuando lo carga en GoDaddy, esto será lo que le ocurra. La solución está extremadamente mal documentada por GoDaddy: debe enviar a través de sus servidores, y también desactivar todas las características de seguridad, nombre de usuario y contraseña (¿eh ?!), dándole esta configuración para PHPMailer:

$mail->isSMTP(); $mail->Host = ''relay-hosting.secureserver.net''; $mail->Port = 25; $mail->SMTPAuth = false; $mail->SMTPSecure = false;

GoDaddy también se niega a enviar con una dirección De que pertenezca a cualquier dominio aol, gmail, yahoo, hotmail, live, aim o msn (ver sus documentos). Esto se debe a que todos esos dominios implementan medidas antifalsificación SPF y DKIM, y falsificar su dirección de origen es falso.

Puede que le resulte más fácil cambiar a un proveedor de alojamiento más iluminado.


Creo que en unos pocos pasos podemos hacer que esto funcione correctamente.

  1. En su Gopaddy / Hostgator Cpanel> Seleccione registros MX> Seleccione el dominio en cuestión> Seleccione "Remote Mail Exchanger "

    Puede probar la entrega de correo en este momento, el problema puede resolverse.

  2. Estoy seguro de que está configurado correctamente, pero créanme cuando se trata de bueno ole Cpanel, PhpMailer y Godaddy / Hostgator. Es un lugar donde el sentido común no tiene sentido.

reemplazar:

$mail->Host = ''mail.example.in'';

con:

$mail->Host = ''localhost'';

Creo que esto debería resolver cualquier problema suponiendo que cosas como las credenciales de inicio de sesión sean válidas.