Я перемещаю сайт на другой сервер, и у меня возникла проблема с почтой PHP. Но только при отправке почты на хост-домен, например, something@example.com.
mail($send_to, 'Web contact' ,$message,null,"-r support@example.com");
Единственный способ получить почту для отправки - это добавить флаг -r. Кажется, не имеет значения, какой адрес электронной почты вводится после флага.
Это переход с Centos 5 на 6, и я считаю, что теперь почта использует Postfix, а не sendMail.
Есть ли параметр Postfix, который я могу изменить, чтобы избавиться от необходимости добавлять этот флаг при каждом вызове почтовой функции?
Кроме того, есть ли способ принудительно использовать sendMail вместо Postfix, если я не могу это исправить?
Я должен был упомянуть, что знаю, что почта маршрутизируется внутри, как показано в журнале:
РЕДАКТИРОВАТЬ
Это неудачная попытка без флага
May 14 16:13:12 test sendmail[10244]: t4EFDCLq010244: from=apache, size=169, class=0, nrcpts=1, msgid=<201505141513.t4EFDCLq010244@example.com>, 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=<201505141513.t4EFDCLq010244@example.com>
May 14 16:13:12 test sendmail[10244]: t4EFDCLq010244: to=support@example.com, 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=<apache@example.com>, 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=<support@example.com>, 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 <apache@example.com> 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=<20150514151312.B47B625675D@example.com>
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=<apache@example.com>, 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
И это с флагом
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: Authentication-Warning: example.com: apache set sender to test@example.com using -r
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: from=test@example.com, size=169, class=0, nrcpts=1, msgid=<201505141513.t4EFDN45010251@example.com>, 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=<201505141513.t4EFDN45010251@example.com>
May 14 16:13:23 test postfix/qmgr[10102]: 3B3EF256738: from=<test@example.com>, size=662, nrcpt=1 (queue active)
May 14 16:13:23 test sendmail[10251]: t4EFDN45010251: to=support@example.com, ctladdr=test@example.com (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=<support@example.com>, 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
Похоже, что проблема заключается в том, что пользовательский apache отскакивает от Postfix, в идеале я бы хотел, чтобы Postfix все равно отправлял для этого пользователя.
Конфигурация Postfix
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
Для начала нужно удалить один из MTA. Наличие двух MTA в одной системе может дать неожиданный результат. Так как у меня только опыт работы с postfix, то предлагаю вам удалить sendmail. После этого удаления mail
команда будет использовать postfix вместо sendmail в качестве агента по умолчанию.
yum remove sendmail
Во-вторых, вы можете установить параметр sendmail по умолчанию в php.ini с участием sendmail_path
параметр например
sendmail_path = '/usr/sbin/sendmail -t -i -f test@example.com'
PS: согласно эта страница руководства, -r
флаг - устаревшая форма -f
флаг. Итак, я предпочитаю использовать -f
.
Третий относительно твой комментарий:
Из журнала я вижу, что он подпрыгивает, потому что apache@example.com не существует. Я добавил это, и это решает проблему, но есть ли в Postfix параметр, который я могу добавить, чтобы не создавать apache@example.com?
Это сообщение об ошибке
550-Проверка не удалась для 550-Нет такого пользователя »550 Ошибка проверки отправителя
постфикс не кидал. Письмо было отклонено вашим фактическим почтовым сервером mail.**z*.net
который работает Exim. Вам нужно поговорить с администратором Exim, почему он так себя ведет
В твоем main.cf
параметр, называемый mydestination
. Удалите там форму доменного имени, чтобы почта в домен больше не доставлялась локально.
Перед:
mydestination = $myhostname, $mydomain
После:
mydestination = $myhostname
$myhostname
должен оставаться в этом списке для внутренней почты (cron, apt, сообщения об ошибках и т. д.)