Используйте procmail для доставки на стандартный вывод и второй сервер

Я хотел бы, чтобы сервер Postfix доставлял каждое сообщение определенному транспорту, а также ретранслировал на второй сервер. В master.cf у меня есть следующий транспорт:

zarafa unix - n n - 10 pipe
  flags= user=vmail argv=/usr/bin/zarafa-dagent ${user}

Поскольку я не могу заставить Postfix доставлять на два транспорта, то, что мне, вероятно, нужно, это транспорт-оболочка, возможно, с использованием procmail, которая доставляет zarafa-dagent и передает на второй сервер (не просто перенаправляя на адрес; пересылает на второй сервер).

Это также может быть скрипт, который вызывает sendmail или что-то еще, но на данный момент я не знаю, как действовать дальше.

такие вещи, как bcc_maps, не работают, потому что тогда они не производят заголовки X-Original-To и Delivered-To. Его необходимо отправить тому же получателю на сервере, на который он ретранслируется, как исходному серверу.

Изменить: возможно, мне следует кое-что уточнить: на резервной машине я не могу иметь те же почтовые ящики, что и основной; есть только одна коробка. Если бы у меня были все почтовые ящики, BCC на этом сервере был бы в порядке. Но поскольку на первичном сервере электронная почта доставляется с использованием пользовательского транспорта zarafa, я никак не могу сообщить вторичному специалисту, какие существуют почтовые ящики. Поэтому я хотел ретранслировать этот сервер, и этот сервер также считает себя локальным для рассматриваемого домена. Таким образом, заголовок Delivered-To сообщит мне, каким был исходный RCTP.

3 ответа

Мне нужно было сделать нечто подобное, и по вашему вопросу действительно кажется, что postfix не допускает более одной доставки за раз.
Мне удалось решить мою проблему, используя небольшую оболочку для перехвата запроса, а затем запустив необходимые рассылки.
Единственная проблема в том, что postfix скажет "Хорошо, доставлено!", Но на самом деле он не знает, была ли доставка успешной или нет.
Во всяком случае, это код моей оболочки:

#!/bin/bash
USER=`echo $2 | awk -F"@" '{print $1}'`
NEXTHOP=`echo $2 | awk -F"@" '{print $2}'`
/usr/bin/sudo -u vmail /usr/bin/procmail -t -m USER=$USER NEXTHOP=$NEXTHOP /etc/procmailrc

"USER" - это имя пользователя, содержащееся в электронном письме, "NEXTHOP" - это домен, содержащийся в электронном письме... для ясности: USER@NEXTHOP.

Затем сообщение будет передано в сценарий как stdin, что позволит вам получить его и использовать по своему усмотрению.

Я просто надеюсь, что это будет полезно для вас:)

С помощью этой страницы, я думаю, я почти там, но пока нет. Я не знаю, как перейти на второй сервер, из Bash.

Я сделал транспорт в master.cf:

filtertest    unix  -       n       n       -       10      pipe
    flags=Rq user=filter null_sender=
    argv=/usr/local/bin/filter-test.sh -f ${sender} -- ${recipient}

Я включил параметр content_filter в транспорт smtp (добавлю его и в smtps, когда он будет работать):

smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=filtertest:dummy

У меня есть скрипт filtertest:

#!/bin/bash

# Simple shell-based filter. It is meant to be invoked as follows:
#       /path/to/script -f sender recipients...

# Localize these. The -G option does nothing before Postfix 2.3.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.

# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
    echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || {
    echo Cannot save mail to file; exit $EX_TEMPFAIL; }

# Relay message to backup server
#TODO: how?

$SENDMAIL "$@" <in.$$

exit $?

Что остается: как сделать так, чтобы этот сценарий bash передавал (не пересылал) содержимое файла tmp на второй сервер?

Вы можете попробовать использовать Roundhouse или установить MIMEDefang и использовать add_recipient для пересылки электронных писем на любой другой сервер, который вы хотите.

Другие вопросы по тегам