Pregunta

Este es un problema que estoy seguro es fácil de solucionar, pero lo he estado golpeando todo el día.

Estoy desarrollando un nuevo sitio web para un cliente. El sitio web reside en (este es un ejemplo) website.com. Tengo un script de formulario PHP para enviar por correo electrónico las solicitudes de los visitantes a request@website.com.

Cuando codifiqué esto en un servidor provisional en un dominio diferente, todo funcionó bien. Cuando lo moví a website.com, los mensajes de correo nunca llegaron. El servidor web está en un host virtual con un ISP importante.

Esto es lo que he aprendido desde entonces: el servidor de correo de mi cliente es Microsoft Exchange en una caja físicamente en su oficina. Cada vez que alguien del mundo exterior envía un correo electrónico a request@website.com, llega el correo. Pero si el servidor web envía a la misma dirección de correo electrónico, falla cada vez. Esto no es un problema de PHP. Aseguro el shell en el servidor web y lo he probado tanto con sendmail como con la aplicación de correo UNIX. También lo probé enviando varias cuentas de correo electrónico desde el shell. Puedo enviarme un correo electrónico, por ejemplo, a nadie en el dominio de website.com.

En resumen, cuando inicie sesión en website.com, envíe un correo electrónico a request@website.com, user@website.com, another_user@website.com todos fallan. Todas las demás direcciones funcionan bien. Lo que descubrí es que esos correos electrónicos descartados se enrutan al "catchall" del servidor web. cuenta donde se sientan en su bandeja de entrada.

He realizado una búsqueda MX en website.com. El registro MX apunta a mailsec.website.com. Puedo telnet al mailsec.website.com puerto 25 y ver el servidor SMTP.

Me parece que website.com no está haciendo una búsqueda MX cuando está enviando correo a request@website.com. Mi teoría es que reconoce el dominio como local, ve que no hay "solicitudes". cuenta de usuario para entregarlo y coloca el correo en la cuenta general. Lo que quiero es obligar a sendmail a realizar la búsqueda MX y enviar el mensaje al servidor de Exchange. Estoy al final del ingenio aquí. No puedo entender cómo hacer esto.

Para el caso, puede que esté fuera de lugar aquí y haya diagnosticado erróneamente esto por completo. El correo de Internet y MX siempre me han parecido un arte negro, y mi ignorancia ciertamente se muestra en esta pregunta.

¿Fue útil?

Solución

Creo que el problema es que sendmail (su proceso) está hablando con el demonio sendmail local. El daemon de sendmail local piensa que debido a que es website.com, debería saber cómo entregar el correo electrónico. Desafortunadamente, la dirección real en el campo para no existe en el servidor web y, por lo tanto, la vuelca en el " catchall " buzón de correo Debe hablar con su ISP y hacer que actualicen su configuración de sendmail para que el correo dirigido a ... @ website.com llegue al intercambiador de correo en lugar de ser manejado localmente.

Otros consejos

Sendmail por defecto adivina la lista de dominios de correo electrónico locales. Se puede desactivar utilizando la siguiente línea en su archivo sendmail.mc:

define(`confDONT_PROBE_INTERFACES',`True')

Como dominios de correo electrónico local de la lista raíz antes y después del cambio.

echo '$=w' | sendmail -Am -bt

Verá qué dominios se deben agregar " manualmente " al archivo (generalmente) / etc / mail / local-host-names después de deshabilitar las conjeturas automáticas.

P.S. Para la pregunta de sendmail puede usar news: comp.mail.sendmail

tvanfosson básicamente lo tiene, pero como una solución temporal, debería poder cambiar su script para que envíe 'user@mailsec.website.com', y luego el correo se entregará al servidor de correo real.

Edite el archivo tsm.cf (en / etc / mail / o similar) para incluir

FEATURE(relay_entire_domain) 

entre las líneas DOMAIN () y MAILER (). Como está editando el archivo, es posible que también desee mejorar la seguridad con

define(`confPRIVACY_FLAGS',``noexpn,novrfy'')

Después de cambiar el archivo tsm.cf (o cualquier archivo de configuración de sendmail), reinicie o apunte el proceso de sendmail.

Este cambio es necesario porque los servidores WWW y MX para el dominio no existen en el mismo espacio de proceso; Esta CARACTERÍSTICA activa sendmail para procesar mensajes para el dominio utilizando su mecanismo de entrega externo.

La parte editada del archivo tsm.cf debería ser similar a esta:

DOMAIN(website.com)dnl
FEATURE(relay_entire_domain)dnl
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

Lo que funcionó para mí fue agregar un registro MX en el servidor web que aloja el sitio web, que apunta al host asignado en el servidor de nombres de dominio original. En el caso presentado aquí sería un registro mx apuntando a: mailsec.website.com

Soy nuevo aquí. Quería extender la respuesta RB_CWI , pero no tengo permitido comentar. Su solución funcionó muy bien.

no se requiere para definir el DOMINIO ().

Sin embargo, en mi sistema tuve que instalar el paquete sendmail-cf.

Las siguientes instrucciones se realizaron en CentOS 6.5

Primero, instale sendmail-cf

sudo yum install sendmail-cf

Luego, edite el senmail.mc

sudo vi /etc/mail/sendmail.mc

En la parte inferior del archivo, agregue FEATURE (relay_entire_domain) dnl, para que se vea así:

...
FEATURE(relay_entire_domain)dnl
MAILER(smtp)dnl        # right above this line
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl

Guarde el archivo y reinicie sendmail.

sudo service sendmail restart

Me quedé atrapado en el mismo problema. MX apunta a un servidor externo de Exchange, pero php / sendmail no buscó este registro. En cambio, los correos publicados por WordPress en este servidor web cayeron en el buzón catchall.

La solución fue eliminar TODOS los buzones en el servidor web. Ahora sendmail estaba interesado en el MX y todos los correos fueron a Exchange.

Sin embargo, Exchange utiliza el servidor de correo del espacio web como SmartHost para los correos salientes. Como solución para esto, pudimos usar las credenciales FTP para acceder al servidor de correo. Supongo que esta solución no funciona en todos los proveedores en este planeta, pero en nuestro caso (all-inkl.com) funcionó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top