Я использую Sendmail на сервере Centos для отправки электронной почты для сценариев PHP, но проблема в том, что почта доставляется в локальный почтовый ящик на машине, а не в записи MX для домена, которые фактически указывают на другую машину, которую я использовать для электронной почты.
Я бы хотел, чтобы sendmail не пытался локально доставлять почту для домена, для которого настроен компьютер, есть ли простой способ отключить локальную доставку?
Домена нет в файле имен локальных хостов.
Я уже много гуглил и посмотрел:
Конфигурация Sendmail, чтобы почта не доставлялась на локальный компьютер
Отключить локальную доставку в Sendmail
Но либо ответа нет, либо он не подходит.
Я не хочу ретранслировать на другой сервер, я просто хочу, чтобы он отправлял почту независимо от домена.
В качестве примера:
У меня два сервера: один - это почтовый сервер mail.example.com и веб-сервер example.com, когда я использую сервис smtp на веб-сервере, он в настоящее время направляет почту в локальный почтовый ящик на example.com, но он должен идти в почтовые ящики на mail.example.com
Вывод sendmail -bt возвращает:
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter > 3,0 info@example.com canonify input: info @ example . com Canonify2 input: info Canonify2 returns: info canonify returns: info parse input: info Parse0 input: info Parse0 returns: info ParseLocal input: info ParseLocal returns: info Parse1 input: info Parse1 returns: $# local $: info parse returns: $# local $: info
Что я сделал, чтобы отключить локальную доставку. Я буду использовать домен example.com.
Требования:
Шаги:
vim /etc/mail/sendmail.mc
в конце:
define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl
а потом:
sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart
тестирование:
echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v
Вы должны увидеть, как он подключается к серверу Google, а затем вы должны увидеть, как ваша почта доставляется в ваш почтовый ящик Google.
Благодаря Споркеру и Павлу вы направили меня в правильное русло, чтобы исправить это.
Моя первоначальная проблема заключалась в том, что sendmail рассматривал мои учетные записи электронной почты домена example.com как локальные.
Эти ссылки оказались очень полезными: Sendmail в локальный домен игнорирует записи MX (часть 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-domains.html
Но в моем случае, используя FreeBSD 8.2, что действительно помогло:
# cd /etc/mail
# vim freebsd.mc
Добавьте эти две строки:
define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl
Прямо перед:
MAILER(local)
MAILER(smtp)
# make
--- Это вывод ---
cp freebsd.mc host.example.com.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
cp freebsd.submit.mc host.example.com.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf
--- Конец вывода ---
# cp sendmail.cf sendmail.cf.bak
# cp host.example.com.cf sendmail.cf
# /etc/rc.d/sendmail restart
Надеюсь, это кому-то избавит от головной боли.
Я не использую sendmail, но верю, что sendmail обработает любой домен, хранящийся в /etc/mail/local-host-names
как локальные доменные имена.
Вы можете попробовать очистить этот файл (не удаляйте его), перезапустите sendmail и посмотрите, как у вас дела.
РЕДАКТИРОВАТЬ
Имя файла, о котором я упоминал, фактически установлено в sendmail.cf
и ваш не может быть установлен на local-host-names
смотреть в /etc/mail/sendmail.cf
для
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names
Это ни в коем случае не проверенные факты, это просто мои мысли вслух.
Возможно, это не то решение, которое вы ищете, но если ваша проблема в том, что пользователь «admin» или «root» получает много писем и огромный почтовый ящик, вы можете подумать о настройке задания cron для очистки почтового ящика. выходят каждую неделю, день и т. д.
У нас было несколько серверов CentOS с этой проблемой, но загвоздка заключалась в том, что мы хотели иногда читать почту, так как иногда это может помочь диагностировать различные проблемы.
Решением было просто выполнить cron и время от времени протирать поле.
Если бы мы обнаружили проблему ... мы бы закомментировали задание cron (временно) и прочитали журналы и электронные письма в поисках подсказок.
Просто мысль ... и быстрое / легкое решение для тебя.
Если нет, взгляните на файл sendmail.mc и внесите соответствующие изменения.
Быстрое обновление:
Это не совсем то, о чем вы просите, но может дать вам некоторые идеи и помочь пролить свет на вещи для вас:
Лично я больше сторонник постфиксов, но это очень похоже на то, что вы настроили отправляющий сервер для получения почты для @ yourdomain.com. Если есть sendmail, эквивалентный транспортному механизму в postfix, я использую его для внутренней маршрутизации почты между моими серверами.
Похоже, ваш набор правил 3 удаляет информацию о домене. Ниже приведены некоторые общие шаги по устранению неполадок. Если это не сработает, вам придется прислать мне свой sendmail.cf, чтобы я посмотрел.
Исходя из вывода, example.com рассматривается как локальный домен. выполните nslookup:
установить q = mx
domain.com
Если это дает IP-адрес локальной машины, вам нужно посмотреть свой DNS. Также проверьте / etc / hosts, чтобы убедиться, что domain.com отсутствует в списке.
Кажется, он также удаляет @ domain.com, не могли бы вы попробовать что-нибудь вроде user@stackoverflow.com, чтобы увидеть, не перечисляет ли он его как локальный домен.
Также проверьте значение Cw в файле sendmail.cf.
Возможно, это не то, что вам нужно, но SSMTP очень хорош для сервера только исходящей почты, где вы можете указать почтовый концентратор.
Если вы хотите вернуть ошибку при попытке доставки на локальный адрес, вы можете использовать карту доступа и что-то вроде:
@your.domain error:nouser 550 No such user here
Если вы хотите, чтобы сообщения электронной почты были «доставлены», но выбрасывались, вы можете установить виртуальную запись, которая будет использовать псевдонимы для всего "@your.domain
"на dev-null. Может быть полезно продолжить как минимум"root
"локально, потому что он часто является получателем отчетов по электронной почте от заданий cron и т. д. Попробуйте что-нибудь подобное в своем virtusertable
:
root@your.domain local:root
@your.domain local:dev-null
С местным dev-null
псевдоним, который перенаправляет сообщения в / dev / null, он должен продолжать доставлять корневую электронную почту, но отбрасывать сообщения, доставленные другим пользователям.
Исправление Павла сработало для меня, но sendmailconfig не существует на centos, поэтому мне пришлось запустить
cd /etc/mail
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart
чтобы обновить конфигурацию
Просто подтверждаю, что ответ Павла решил мою очень похожую проблему.
Для тех, кто использует FreeBSD, но не заинтересован в том, чтобы слишком вовлекаться в утомительную работу cf-файлом sendmail, следующая последовательность - это то, что вы использовали бы, чтобы добавить две строки в примере Павла:
cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart
Я последовал этим предложениям и заметил, что просто добавляя шаг, упомянутый Павлом,
«/ etc / hosts, определяющий example.com, назначенный тому же IP-адресу, что и выше», в основном я добавил свой IP-адрес сервера, за которым следует имя сервера. /etc/hosts
файл, и все.
Для меня было достаточно, чтобы электронные письма перенаправлялись через Google и обратно на мои электронные письма.
Если вы используете Cpanel / WHM для управления своим сервером, убедитесь, что вы выбрали Remote Mail Exchanger в Cpanel / WHM вместо Automatically Detect Configuration. Remote Mail Exchanger будет отправлять всю электронную почту через записи MX, включая локальный домен. В автоматическом режиме электронные письма локального домена будут напрямую маршрутизироваться локально и не будут отправляться на внешний сервер, определенный в записях MX.