LINUX.ORG.RU

Локальная почтовая очередь с периодические отправкой

 , ,


0

2

Всем привет.

Я может как-то не так смотрю на велосипед и снова его изобретаю, но хочется следующего: из командной строки отправлять email через smtp с авторизацией от имени одного конкретного email но с «очередью».

Возможно как то сложно описал, но что то не получается иначе. Смысл какой. Сейчас у меня на Ubuntu настроен ssmtp, он заменил собой утилиту mail и sendmail и он даже работает. Но у него есть минус - он блокируется на время отправки. Т.е. он пытается и отправляет письмо здесь и сейчас по факту выполнения команды.
А можно ли как то чем то делать все тоже самое, чтолько чтобы в момент выполнения mail письмо клалось в какю то очередь и уже фоновый демон потихоньку реализовывал эту очередь?

заменил собой утилиту mail и sendmail

чтолько чтобы в момент выполнения mail письмо клалось в какю то очередь и уже фоновый демон потихоньку реализовывал эту очередь?

sendmail это умеет, так что заменил видимо плохо.

firkax ★★★★★
()
Ответ на: комментарий от Spider55

Хотя наверно в том что я видел письмо сначала пытается отправиться на месте, а если не получается уже кладётся в очередь. Мне кажется это дефолтный режим работы sendmail-а, по крайней мере в фрибсд он из коробки. Но думаю где-то подкрутить чтобы первую попытку он не делал несложно, ну или в крайнем случае сделать чтоб она всегда сразу фейлилась (зафайрволить консольному сендмейлу всё чтоб он сразу получал permission denied).

firkax ★★★★★
()
Ответ на: комментарий от aol

Ага. Exim4 стоял по умолчанию. Немного порылся и средствами

dpkg-reconfigure exim4-config
перевёл его в smarthost ещё немного и прописал свой smtp relay с авторизацией.
Первые проверки - удачно, отправляет. Но вот письма для «локальных» пользователей кладёт в maildir.
Ещё немного порылся и нашёл, что в 200_exim4-config_primary можно убрать
domains = ! +local_domains
и теперь он вообще всё шлёт в relay.
Отлично! но осталась проблема:
echo "Test" | mail -s "Test" nobody

пытается слать на адрес nobody@localhost, но что хорошо через relay, который его конечно же отпинывает.
Немного гугленья и манов, вроде как можно в /etc/aliases прописать «алиасы». Пробуем. Добавил такую строку:
nobody: spider@gmail.com

И что же? Немного не то что ожидалось:
2024-12-01 21:29:15 1tHlsp-005fdH-6N <= spider@gmail.com U=spider P=local S=382                                                                                                                                2024-12-01 21:29:16 1tHlsp-005fdH-6N => spider@gmail.com <nobody@localhost> R=smarthost T=remote_smtp_smarthost H=mx.gmail.com [IP] X=TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256 CV=yes DN="CN=mail.gmail.com" A=plain K C="250 2.0.0 Ok: 395 bytes queued as CB82161917C"                                                                                                      2024-12-01 21:29:16 1tHlsp-005fdH-6N Completed


Почему блин он не заменил адрес, а добавил «кометического получателя» ?

Spider55
() автор топика
Ответ на: комментарий от Spider55

Молодец, ты отлично продвигаешься в своем изучении! По этому поводу я постараюсь погуглить твою проблему тебе в помощь, но не обещаю решения.. Сам я алиасами не пользуюсь.

aol ★★★★★
()
Ответ на: комментарий от aol

Нашёл данную настройку в 02_exim4-config_options в виде

.ifndef MAIN_FORCE_SENDER
local_from_check = false
local_sender_retain = true
untrusted_set_sender = *
.endif

На первый взгляд MAIN_FORCE_SENDER нигде не объявлен и должно быть как надо тогда, если я правильно понял рекомендацию на serverfault. Но на всякий случай я убрал ifndef и пересобрал всё. Изменений нет. Он по прежнему не заменяет адреса, а добавляет просто «имя» отправителя на основе /etc/aliases. А /etc/email-addresses на первый взгляд вообще не влияет. Попробовал добавить туда:
nobody: spider@gmail.com
nobody@localhost: spider@gmail.com

Spider55
() автор топика
Ответ на: комментарий от Spider55

На первый взгляд MAIN_FORCE_SENDER нигде не объявлен

то есть,

local_sender_retain = true

Что мы видим в документации про этот параметр?

When a message is submitted locally (that is, not over a TCP/IP connection) by an untrusted user, Exim removes any existing Sender: header line. If you do not want this to happen, you must set local_sender_retain,

Почему блин он не заменил адрес

На первый взгляд получается, вот, поэтому и не заменил… (retain == сохранить)

aol ★★★★★
()
Ответ на: комментарий от Spider55

Ничего не читал, но формат конфига исльно напоминает хеш.

В таком случае надо запускать postmap чтобы он скомпилил его в формат сипользуемый почтовым сервером.

usermod
()

А можно ли как то чем то делать все тоже самое, чтолько чтобы в момент выполнения mail письмо клалось в какю то очередь и уже фоновый демон потихоньку реализовывал эту очередь?

mail именно это и делает. То есть отдаёт локальному sendmail, который либо оригинальный, либо врапер одноимённый у postfix/exim/разное.

можно ещё посмотреть пакет gnu mailutils, может там что есть. Реализация mail там есть точно.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)