Назад | Перейти на главную страницу

Отключить локальную доставку в Sendmail

Я использую 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.

Требования:

  • example.com Запись, указывающая на IP-адрес, назначенный одному из интерфейсов eth.
  • / etc / hosts, определяющий example.com, назначенный тому же IP-адресу, что и выше
  • записи MX example.com, указывающие на серверы Google (ASPMX.L.GOOGLE.COM и т. д.)
  • установка sendmail по умолчанию (моя была на Ubuntu)

Шаги:

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 и внесите соответствующие изменения.


Быстрое обновление:

Это не совсем то, о чем вы просите, но может дать вам некоторые идеи и помочь пролить свет на вещи для вас:

http://www.pettingers.org/code/sendmail-local.html

Лично я больше сторонник постфиксов, но это очень похоже на то, что вы настроили отправляющий сервер для получения почты для @ 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.