Я понимаю, что этот вопрос был задан и на него уже был дан ответ. Вот что я сделал.
Создал общий адрес и пользователя. Вот мой /etc/postfix/virtual
файл.
@example.com catchall
Добавил это в main.cf
. Вот запись.
virtual_alias_maps = hash:/etc/postfix/virtual
Это сработало, и вся моя почта пошла на /var/mail/catchall
что было хорошо. Затем я хотел создать канал, запускающий программу каждый раз при получении электронного письма. Для этого я создал / etc / postfix / transport
example.com catchall:
Затем я добавил это в свой master.cf
файл.
catchall unix - n n - - pipe
flags=F user=catchall argv=/tmp/test.sh
test.sh - это просто крошечный сценарий оболочки, поэтому я вижу, что мой код работает.
#!/bin/bash
echo `whoami` > /tmp/aaa.txt
Наконец, я убедился, что общий пользователь может запустить этот скрипт с su -c "/tmp/test.sh " catchall
, который выводит catchall
в ожидаемый файл aaa.txt.
Итак, мой вопрос, что дает? Что мне не хватает? Любая помощь? Я читал документацию, читал руководства, и я просто не могу заставить их работать. Общий адрес работает правильно, я вижу почту, получаемую в mail.log
, mail.err
пуст, я запустил postmap для всех своих файлов и выполнил postfix reload
после редактирования файлов. Но мой сценарий оболочки не запускается ....
postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_size_limit = 0
mydestination = twinsen.example.com, myhostname, localhost.localdomain, localhost
myhostname = mydomain-guts
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = hash:/etc/postfix/virtual
mail.log
Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: connect from mail-we0-f172.google.com[74.125.82.172]
Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: 790E01400D4: client=mail-we0-f172.google.com[74.125.82.172]
Jan 11 22:18:02 mydomain-guts postfix/cleanup[3834]: 790E01400D4: message-id=<CA+wDdVbiDS=Kpa7nMA4-y5GCMgo0PcsK4G5Kb_uE_xKHBYY+vQ@mail.gmail.com>
Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: 790E01400D4: from=<mygmail@gmail.com>, size=1828, nrcpt=1 (queue active)
Jan 11 22:18:02 mydomain-guts postfix/smtp[3831]: 790E01400D4: to=<catchall@example.com>, orig_to=<kik@twinsen.example.com>, relay=none, delay=0.24, delays=0.2/0/0.04/0, dsn=5.4.6, status=bounced (mail for example.com loops back to myself)
Jan 11 22:18:02 mydomain-guts postfix/cleanup[3834]: B3E2F1400D9: message-id=<20150112031802.B3E2F1400D9@mydomain-guts>
Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: B3E2F1400D9: from=<>, size=3677, nrcpt=1 (queue active)
Jan 11 22:18:02 mydomain-guts postfix/bounce[3832]: 790E01400D4: sender non-delivery notification: B3E2F1400D9
Jan 11 22:18:02 mydomain-guts postfix/qmgr[3829]: 790E01400D4: removed
Jan 11 22:18:02 mydomain-guts postfix/smtpd[3835]: disconnect from mail-we0-f172.google.com[74.125.82.172]
Jan 11 22:18:03 mydomain-guts postfix/smtp[3831]: B3E2F1400D9: to=<mygmail@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.171.26]:25, delay=0.85, delays=0.01/0/0.28/0.56, dsn=2.0.0, status=sent (250 2.0.0 OK 1421032683 p20si20890136qgd.117 - gsmtp)
Jan 11 22:18:03 mydomain-guts postfix/qmgr[3829]: B3E2F1400D9: removed
Ух, как досадно. К счастью, я понял это, и мне помогло внимательное изучение mail.log.
Что мне нужно было сделать.
в main.cf
Я изменил первую запись в директиве mydestination на mydomain.com
. Я возился после того, как спросил и до того, как получил благодарность за запрос файла main.cf, и заметил, что получаю разные результаты в mail.log
Наконец я изменил
/etc/mailname
содержит twinsen.mydomain.com
.
Проблема заключалась в том, что письмо отклонялось моим сервером из-за несоответствия имени поддомена.
Я все еще получал ошибки.
postfix/trivial-rewrite[4745]: warning: hash:/etc/postfix/transport lookup error for "*"
Исправили после запуска:
postmap /etc/postfix/transport