Я попробовал этот ответ, который решает эту проблему. Но сообщения не кажутся легко изменяемыми в версии, которую я имею (2.11.0).
Например, нет / var / spool / mqueue dir, но вместо этого / var / spool / postfix / ...
Я хочу уточнить две вещи.
- Во-первых, этот ответ был применен к sendmail, а не к postfix.
- Во-вторых, прямые манипуляции с необработанными файлами очереди вообще не поддерживались.
Итак, у вас есть несколько вариантов здесь
1. параметр smtp_generic_maps
Этот ответ вдохновлен этим превосходным ответом . Он автоматически перезапишет старый адрес на новый. Вы можете определить файл для отображения старого адреса на новый адрес.
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
account@localdomain.example.com account@example.com
Не забудь postmap /etc/postfix/generic
и бегиpostfix reload
- Перевернутая сторона : вам не нужно запрашивать сообщение
- Недостаток: Postfix переписывает адреса отправителя и получателя, которые соответствуют
account@localdomain.example.com
.
2. sender_canonical_address
Чтобы преодолеть недостатки первого варианта, вы можете использовать sender_canonical_maps
. Это решение основано на предложении автора Postfix . Как и в первом варианте, вы можете определить файл для сопоставления старого адреса с новым.
/etc/postfix/main.cf:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
/etc/postfix/sender_canonical:
account@localdomain.example.com account@example.com
Беги, postmap /etc/postfix/sender_canonical
беги postfix reload
. Из-за потока очереди postfix, вы должны переместить очередь в очередь с помощью командыpostsuper -r queueid
- Upside: Postfix не переписывает адрес получателя.
- Недостаток: Вы должны переоформить все затронутые сообщения. Но вы можете вернуть все отсроченные одной командой
postsuper -r ALL deferred
3. прямое манипулирование постфиксной очередью
Это старые способы ручного изменения очереди для расширенной обработки. Этот ответ пришел из списков рассылки postfix-users
Короче говоря
Извлечь очередь
# postsuper -h queueid
# postcat -qbh queueid > tempfile.eml
# vi tempfile.eml
Повторно отправить очередь и удалить старую очередь
# sendmail -f $sender $recipient < tempfile.eml
# postsuper -d queueid
Для документации вышеупомянутой команды, обратитесь к этой странице
Примечание:
оригинальное решение из списков рассылки postfix-users , используется postcat -q queueid >tempfile
для извлечения очереди. Эта команда извлечет заголовок, тело и метаинформацию очереди. Как указал Азендейл ниже ,sendmail
откажется отправить это искаженное письмо из-за мета-информации.
Использование -bh
параметра в дополнение к q
параметру заставит postcat фильтровать вывод только в заголовок и тело, не включая метаинформацию. Дополнительным преимуществом этого является то, что временный файл находится в формате, который большинство почтовых клиентов распознают как формат .eml, что позволяет просматривать итоговое (отредактированное) сообщение.
postcat -qbh queueid >tempfile
. (Дополнительное преимущество: тогда он в формате .eml.) Если бы я просто использовал-q
его, то, похоже, ничего не делал, когда я запускал sendmail. Postfix версия 2.8.4. Кто-нибудь может это подтвердить? Если так, давайте отредактируем этот ответ.