LINUX.ORG.RU
ФорумAdmin

Сам базовый принцип отправки почты в Linux

 


0

1

Всем привет. Начал настраивать exim-ы smarthost-ы, и понял, что не понимаю сам низкоуровневый принцип, базу: как система отправляет почту? Ещё и эти команды mail/mailx.

Вот надо какой-то программе отправить письмо в вакууме... Она делает библиотечный вызов «mail()» или дёргает системную программу /usr/bin/mail? Или, может быть, первое вызывает второе?

Как команда mail определяет, через какой сервер слать почту? Ведь системная команда «mail» это «виртуальная команда»: что exim4, что pistfix усианавливают в систему свою версию команды «mail». Значит, эта команда для отправки использует настройки того пакета, который её установил; Exim и Postfix - это оба MTA. Логично...

Если мне нужно просто отсылать письма, зачем держать в системе эти жирные сложные программы? Можно ли команде mail прописать где-то в конфигурационном файле «отдавай письма на этот хост-почтовый сервер, пусть он шлёт»? Ах да, ведь нет отдельной команды mail, это всегда часть пакета-MTA... Получается, для задачи «просто отдать письмо на отправку» нужно держать на локалхосте целый MTA? Как-то странно всё это.

Везде речь идёт о работе с почтой в консоли.
Можно ли не держать в системе МТА и отправлять почту?




Перемещено Dimez из talks


Библиотечного вызова mail() не существует. Чтобы отправить почту, надо подключиться к SMTP-серверу (либо серверу того ящика, на который ты шлёшь - напрямую, либо серверу твоего ящика, чтобы тот уже передал дальше - это часто удобнее и надёжнее), отослать ему несколько команд (приветствие, адрес отправителя, адрес получателя) и тело письма, посмотреть ответ (либо письмо принято в работу, либо отказ с коротким текстом причины).

Всё это делает программа отправки почты (правда там где я видел она обычно называлась не mail а sendmail но не суть), действительно можно вызвать её и передать ей всё что нужно, но можно и самостоятельно открыть подключение к серверу и всё ему отправить.

Если пользуешься командой - у этой команды будут свой конфиг, который можно прописывать независимо от конфига той проги, которая захотела отправить письмо - тот самый unix-way, разделение ответственности. Если же твоя прога сама подключается к серверу, все настройки отправки писем (включая всякую нужную муть вроде dkim) надо будет включать в её собственный конфиг.

отдавай письма на этот хост-почтовый сервер, пусть он шлёт»?

В freebsd 14 из этих соображений заменили sendmail, полноценный MTA, на легковесный DMA (man dma). Можешь тоже его себе установить.

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

Можно ли не держать в системе МТА и отправлять почту?

Почтовый протокол довольно простой, раньше вообще можно было отправить почту через telnet. Можно написать свою программку на том же перле или любом другой скриптовом языке и пользовать её для рассылок. Тем более если сервер твой и локальный.

vitus@vitus-home:/tmp$ cat test.pl 
#!/usr/bin/perl -w
#
use strict;
use Net::SMTP;

{
  my $sender = 0;
  my $server = 'mail.example.org';
  my $from = 'test@example.org';
  my $to = 'test@example.org';
  my $subj = "Test mail";
  my $body = "I need a help";

  $sender = Net::SMTP->new ($server)
	  or die("$server not connected");
  $sender->mail ($from);
  $sender->to ($to);
  $sender->data ();
  $sender->datasend ("From: $from\n");
  $sender->datasend ("To:   $to\n");
  $sender->datasend ("Subject: $subj\n");
  $sender->datasend ("\n");
  $sender->datasend ("$body\n\n");
  $sender->dataend;
  $sender->quit;
}
vtVitus ★★★★★
()

Ах да, ведь нет отдельной команды mail, это всегда часть пакета-MTA…

Ты сам себе врёшь

$ apt-cache search -n mailx

bsd-mailx - simple mail user agent
mailutils - GNU mailutils utilities for handling mail

Получается, для задачи «просто отдать письмо на отправку» нужно держать на локалхосте целый MTA?

Не обязательно. Есть упрощенные «МТА». Но! тот же postfix/exim довольно небольшие программы и менять их на недоМТА бессмысленно.

Установка postfix/exim – 4-5MB

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

Как команда mail определяет, через какой сервер слать почту?

Никак. Она вызывает команду sendmail.

что exim4, что pistfix усианавливают в систему свою версию команды «mail»

Нет. Они устанавливают sendmail (название в память о настоящем Sendmail; впрочем, настоящий Sendmail всё ещё существует):

$ rpm -qf /usr/sbin/sendmail
postfix-3.6.2-alt1.x86_64

А команда mail берётся из пакета mailx, либо mailutils. Может ещё откуда.

Можно ли не держать в системе МТА и отправлять почту?

Можно. Нужна та штука, что умеет отправлять и имеет в составе нечто, названное sendmail. Но проще Postfix поставить вероятно, обычно он уже есть. Хотя я часто и настоящий Sendmail использую по старой памяти.

AS ★★★★★
()

mail подключается к локалхосту по SMTP протоколу и отправляет письмо указанному пользователю. Т.е. на локалхосте должен быть запущен SMTP сервер и настроен нужным образом, чтобы полученное письмо ушло адресату.

Нет никаких библиотечных вызовов mail, нет никаких системных программ, это просто обычная программа с условно стандартизированным интерфейсом от sendmail или её клон от другого почтового пакета.

Есть альтернативные реализации, которые будут слать письмо через твой gmail аккаунт или как-нибудь ещё. Но тут есть большой минус: если сейчас интернет не работает или другие проблемы, то письмо потеряется. Локальный SMTP сервер сохранит полученное письмо и будет пытаться его отправить, т.е. шансы потерять письмо меньше.

Ничего страшного в том, чтобы держать «целый MTA» на хосте нет, это обычная программа, весьма легковесная. Ну можешь не держать, вариантов отправки почты много. 99% серверов из моего опыта вообще никакую почту никуда не отправляют, и так можно.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от vtVitus

Почтовый протокол довольно простой, раньше вообще можно было отправить почту через telnet.

Почему раньше? Сейчас тоже можно. Год назад где-то отправил успешно. Правда не помню куда и зачем. Но помню что у меня были опасения, что динамический айпи-адрес, выданный мне домашним провом, тому почтовику не понравится. Но обошлось.

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

нет никаких системных программ, это просто обычная программа с условно стандартизированным интерфейсом от sendmail или её клон от другого почтового пакета

Так то в линуксах обычно вообще нет системных программ, ведь каждая программа - просто программа из какого-то пакета, даже /bin/sh. Впрочем, вроде есть дистры где базовая система всё-таки есть. Но можно не мучиться с линуксами а просто поставить фрибсд. Там почта - точно системная штука.

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

Есть альтернативные реализации, которые будут слать письмо через твой gmail аккаунт или как-нибудь ещё. Но тут есть большой минус: если сейчас интернет не работает или другие проблемы, то письмо потеряется.

В nullmailer есть своя очередь сообщений, после восстановления связи письма будут повторно отправлены.

No ★★
()