Pull to refresh

Comments 23

Спасибо! + вам
Все отлично заработало!!!
Я поступил проще. Написал маленький скрипт на perl, который принимает всё, что передаётся на стандартный вход и сохраняет в файл в определенной папке на диске, а в качеств названия выбирает текущую дату и время. вызов этого скрипта вписал в php.ini. Это дало возможность гибко настраивать механизм отладки почты и без необходимости даже не запускать MTA

PS. Позже выяснилось, что я не изобретал велосипеда. Такой скрипт входит в стандартную поставку denwer Дмитрия Котерова
это еще раз подтверждает выгоду, которую человек получает зная множество разных языков программирования... (вот я не знаю еще perl, чтоб написать такую простенькую программку....)
а вы молодец ;)
этот скрипт настолько прост, что написать его можно на чём угодно от sh до php-cli
Такой скрипт придётся прописывать везде, где уходит почта. Например, я пишу не только на PHP, поэтому требовалось получить решение, работающее для всей системы.
В этом хорошо помогает архитектура Linux. В вашем случае тот же самый скрипт нужно просто переименовать в /usr/bin/sendmail и все программы в системе будут направлять почту через него. И уж есовсем простым движением вы можете внутри этого скрипта определить условия при которых данные будут направляться настоящему MTA (если он нужен).
Про архитектуру согласен. Именно поэтому и используется стандартный MTA. А через /usr/bin/sendmail не все программы посылают почту, некоторые через сокет. Поэтому, чтобы не было никаких вопросов в дальнейшем, не стал использовать замену sendmail в виде скрипта.
может я вас удивлю, однако для того, чтобы такие скрипты могли без изменений работать с сокетами существуют специальные демоны типа inetd (xinetd). Это легко избавляет от необходимости держать в памяти немалого размера MTA.

Я отлично понимаю что и как вы делали, но в случае если вам не требуется настоящий MTA для нормальной отправки почты, и вся почта должна быть отладочной, то можно обойтись указанным скриптом и не занимать сервер лишними службами.
Тут дело не в том, какой скрипт прикрутить к inetd, а в том, что проще. При переносе на другую систему всё, что мне нужно сделать - отфорвардить всю почту на локальный ящик. Со скриптом - больше телодвижений. Я бы даже сказал, гораздо больше. Мне кажется, это не стоит 10 Мб памяти, которые отъедает Postfix.

Может быть, есть какие-то преимущества ? Я не понял, объясните, пожалуйста.
если ваша задача "_не_ отправлять почту вовне", то способ с полным отсутствием MTA и скриптом, который пишется за 20 минут совершенно ничем не проигрывает вашему способу. И даже не надо плевать на 10 мегабайт памяти.

В остальном не вижу чем ваши телодвижения проще и "стандартнее" моих =)

Это такие мелочи, право слово, что единственное, что я хочу сказать - есть ещё один простой способ это сделать. Больше я ни на что не претендую.
:-)
Не хотел Вам обидеть ! Не принимайте близко к сердцу.

Просто мне не хочется изобретать велосипеды, в виде скрипта для решения каждой задачи своим путём, если есть уже проверенное рабочее решение. Тем более, Вы прекрасно понимаете, что это совсем не 20 минут.

Если Вы напишете статью, где будет этот скрипт, и описано, как его настроить, и это будет так же просто для любого не-админа, я в начале этой статьи напишу: "UPD: есть лучший способ, пользуйтесь им", с линком конечно, на Вашу статью. И это будет правильно.
в своё время убил много времени на проблему.
есть проще решение:
always_bcc = root@localhost
Если я правильно понимаю, что такое bcc, исходное мыло всё же будет отправлено, просто копии всех сообщений будут доставляться руту. Или эта опция говорит о чём-то другом ?
У меня была задача _не_ отправлять почту вовне.
огромное спасибо, always_bcc это то, что я искал, когда наткнулся на эту статью
А зачем ставить dovecot? Раз почта перенаправляется локальному пользователю, то можно было б обойтись командой mail в консольке. Или mutt (на любителя:-).
Неохота открывать отдельную консоль - лучше пускай в почтовый клиент идёт. Это удобнее.
Тоже решал эту проблему. Решил чуть проще, но и возможностей меньше. Просто настроил локальный почтовый ящик (mailbox). Для этого устанавливается sendmail из коробки и настраивается любимый почтовик на mailbox /var/mail/[username]. Туда будут сваливаться все письма, направленные локально на пользователя [username], например username@server.loc
Недостаток - домен должен резолвится локально и имя пользователя совпадать с вашим. В настройках не ковырялся, но можно и это поправить.
Тоже пробовал с sendmail, но у неё именно описанный недостаток - самый большой. Т.е. дополнительно в DNS ковыряться. Postfix без этого работает ОК. Кстати, как в sendmail сделать глобальный форвардинг - не знаю, не дошёл до этого момента. Удалил после того, как выявилась проблема с DNS.

Имя пользователя, кстати, может быть любым из имеющихся в системе - главное забить его в настройки учётной записи почтового клиента.
Сделал по второму методу, только вот с одним отличием:

Добавил пакет PCRE map support for Postfix (postfix-pcre)

В /etc/postfix/main.cf написал
virtual_alias_maps = pcre:/etc/postfix/virtual.pcre

А в самом файле /etc/postfix/virtual.pcre -
/(.+)@(.+)/ мой_логин@localhost

Теперь вся почта сыпется в мой локальный ящик, но заголовки не затираются. Спасибище за статью :)
о, сейчас я тоже так сделаю.
гигантское спасибо за дополнение !
Чёрт возьми, вовремя! Спасибо за статью!
Sign up to leave a comment.

Articles