Мой сценарий - то, что у меня есть разорванная машина воздуха для keysigning. Мне дали некоторый код, который генерирует электронные письма для людей для получения их ключей со знаком, но я хотел бы сохранить эту машину от любой сети. Я настроил Постфикс на этой машине для помещения всей электронной почты в очередь хранения. Теперь я пытаюсь выяснить способ ввести эти электронные письма на мой сетевой сервер с Постфиксом, правильно настроенным для поставки почты. Я попытался переместить электронную почту в каталог хранения и организацию очередей их с sudo postsuper -r ALL
. Это говорит, что сообщения были поставлены в очередь, но они никогда не поставляются. Кто-либо успешно выполнил это?
Если у кого-либо еще есть эта проблема, я закончил тем, что выполнил свою цель при помощи postcat
для дампа всех электронных писем с очередями в отдельные файлы, скопировал тех, которые к новому серверу и ввели их в Постфикс с помощью sendmail -t
. Эти -t
флаг дает sendmail команду использовать заголовки из файла вместо того, чтобы указать отправителя и получателя как параметры командной строки.
Я смог выполнить все это с единственной командой и отправить сообщение непосредственно на другой сервер через ssh. Я также отредактировал From
поле, установив его на тот от msg_id_in_queue
(взятый от экологических переменных, иначе):
postcat -bhq <msg_id_in_queue> | ssh user@server2 "sendmail -t -f info@domain.com"
Это могло бы быть улучшено с помощью regex для извлечения From
поле непосредственно из исходного сообщения плюс удаление msg_id_in_queue
после этого, но для использования мне было нужно, это было достаточно.
У меня был мертвый сервер, на котором все еще были письма в /var/spool/postfix/{maildrop,defer,deferred}/
. Мне удалось просто скопировать файлы в нужные места на рабочем сервере. Вот как:
Переместить диск, содержащий / var, с неработающего сервера на рабочий сервер и смонтировать его. В этом примере / var был отдельным разделом, и он смонтирован в /mnt/old_var/
. Установите правильные права доступа к файлам (в случае, если UID различаются):
chown -R postfix:postdrop /mnt/old_var/spool/postfix/maildrop chown -R postfix:postfix /mnt/old_var/spool/postfix/defer*
mv /mnt/old_var/spool/postfix/maildrop/* /var/spool/postfix/maildrop/
cd /mnt/old_var/spool/postfix/ find defer -type f -printf "%P\n" \ | while read f; do for d in defer deferred; do mv -v $d/$f /var/spool/postfix/$d/$f done done
или та же последняя команда в одной строке:
cd /mnt/old_var/spool/postfix/; find defer -type f -printf "%P\n" | while read f; do for d in defer deferred; do mv -v $d/$f /var/spool/postfix/$d/$f; done; done
Вы можете установить в транспортном файле / etc / postfix / transport
такую строку:
* smtp:[new_server_dns_or_ip]
Затем выполните:
postmap /etc/postfix/transport
Затем выполните postfix reload
, чтобы загрузить изменения.
Затем очистите очередь с помощью:
postqueue -f
Если вместо настройки *
вы установите имя домена, только почта в этот домен будет перенаправляться на новый сервер.