
Estoy moviendo un sitio a otro servidor y tengo un problema con el correo PHP. Pero sólo cuando se envía correo al dominio del host, por ejemplo[correo electrónico protegido].
mail($send_to, 'Web contact' ,$message,null,"-r [email protected]");
La única forma en que puedo enviar correo es agregando el indicador -r; no parece importar qué dirección de correo electrónico se ingresa después del indicador.
Esta es una migración de Centos 5 a 6 y creo que el correo ahora usa Postfix en lugar de sendMail.
¿Existe alguna configuración de Postfix que pueda cambiar para dejar de tener que agregar esta bandera a cada llamada de la función de correo?
Además, ¿hay alguna manera de forzar el uso de sendMail en lugar de usar Postfix si no puedo solucionar este problema?
Debería haber mencionado que sé que el correo se enruta internamente como se muestra en el registro:
EDITAR
Este es un intento fallido sin bandera.
May 14 16:13:12 test sendmail[10244]: t4EFDCLq010244: from=apache, size=169, class=0, nrcpts=1, msgid=<[email protected]>, relay=apache@localhost
May 14 16:13:12 test postfix/smtpd[10245]: connect from localhost[127.0.0.1]
May 14 16:13:12 test postfix/smtpd[10245]: 9EFB3256738: client=localhost[127.0.0.1]
May 14 16:13:12 test postfix/cleanup[10248]: 9EFB3256738: message-id=<[email protected]>
May 14 16:13:12 test sendmail[10244]: t4EFDCLq010244: [email protected], ctladdr=apache (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30169, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 9EFB3256738)
May 14 16:13:12 test postfix/qmgr[10102]: 9EFB3256738: from=<[email protected]>, size=592, nrcpt=1 (queue active)
May 14 16:13:12 test postfix/smtpd[10245]: disconnect from localhost[127.0.0.1]
May 14 16:13:12 test postfix/smtp[10249]: 9EFB3256738: to=<[email protected]>, relay=mail.example.com[748.31.105.444]:25, delay=0.1, delays=0.04/0.01/0.01/0.03, dsn=5.0.0, status=bounced (host mail.example.com[748.31.105.444] said: 550-Verification failed for <[email protected]> 550-No Such User Here" 550 Sender verify failed (in reply to RCPT TO command))
May 14 16:13:12 test postfix/cleanup[10248]: B47B625675D: message-id=<[email protected]>
May 14 16:13:12 test postfix/bounce[10250]: 9EFB3256738: sender non-delivery notification: B47B625675D
May 14 16:13:12 test postfix/qmgr[10102]: B47B625675D: from=<>, size=2524, nrcpt=1 (queue active)
May 14 16:13:12 test postfix/qmgr[10102]: 9EFB3256738: removed
May 14 16:13:12 test postfix/smtp[10249]: B47B625675D: to=<[email protected]>, relay=mail.example.com[748.31.105.444]:25, delay=0.03, delays=0/0/0.01/0.02, dsn=5.0.0, status=bounced (host mail.example.com[748.31.105.444] said: 550 No Such User Here" (in reply to RCPT TO command))
May 14 16:13:12 test postfix/qmgr[10102]: B47B625675D: removed
Y esto es con la bandera.
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: Authentication-Warning: example.com: apache set sender to [email protected] using -r
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: [email protected], size=169, class=0, nrcpts=1, msgid=<[email protected]>, relay=apache@localhost
May 14 16:13:23 test postfix/smtpd[10245]: connect from localhost[127.0.0.1]
May 14 16:13:23 test postfix/smtpd[10245]: 3B3EF256738: client=localhost[127.0.0.1]
May 14 16:13:23 test postfix/cleanup[10248]: 3B3EF256738: message-id=<[email protected]>
May 14 16:13:23 test postfix/qmgr[10102]: 3B3EF256738: from=<[email protected]>, size=662, nrcpt=1 (queue active)
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: [email protected], [email protected] (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30169, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 3B3EF256738)
May 14 16:13:23 test postfix/smtpd[10245]: disconnect from localhost[127.0.0.1]
May 14 16:13:24 test postfix/smtp[10249]: 3B3EF256738: to=<[email protected]>, relay=mail.example.com[748.31.105.444]:25, delay=1.4, delays=0.03/0/0.01/1.3, dsn=2.0.0, status=sent (250 OK id=1Ysup9-0001Rr-Jv)
May 14 16:13:24 test postfix/qmgr[10102]: 3B3EF256738: removed
El problema parece ser que Postfix está rebotando al usuario apache; idealmente, me gustaría que Postfix envíe de todos modos a este usuario.
Configuración de sufijo
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = localhost.$mydomain
mydomain = example.com
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
Respuesta1
Primero necesitas eliminar uno de MTA. Tener dos MTA en un sistema puede generar resultados inesperados.Como solo tengo experiencia con postfix, te sugiero queeliminar enviar correo. Con esta eliminación, mail
el comando utilizará postfix en lugar de sendmail como agente predeterminado.
yum remove sendmail
En segundo lugar, puedes configurarparámetro de envío de correo predeterminado en php.iniconsendmail_path
parámetro por ejemplo
sendmail_path = '/usr/sbin/sendmail -t -i -f [email protected]'
PD: segúnesta página de manual, -r
la bandera es una forma obsoleta de la -f
bandera. Entonces prefiero usar -f
.
tercero respecto atu comentario:
En el registro puedo ver que está rebotando porque[correo electrónico protegido]no existe. Lo agregué y esto resuelve el problema, pero ¿hay alguna configuración en Postfix que pueda agregar para que[correo electrónico protegido]¿No es necesario crearlo?
Este mensaje de error
550-Error de verificación para 550-No existe ese usuario aquí" 550 Error de verificación del remitente
no fue arrojado por postfix. El correo electrónico ha sido rechazado por su servidor de correo real mail.**z*.net
que ejecutaExim. Necesitas hablar con el administrador de Exim por qué se comporta así.
Respuesta2
En su main.cf
hay un parámetro llamado mydestination
. Elimine el formulario del nombre de dominio allí, para que los correos electrónicos al dominio ya no se entreguen localmente.
Antes:
mydestination = $myhostname, $mydomain
Después:
mydestination = $myhostname
$myhostname
debe permanecer en esta lista para los correos internos (cron, apt, mensajes de error, etc.)