Как электронная почта переходит от SMTP к IMAP?
Я работаю над программированием IMAP-сервера, но сталкиваюсь с одним вопросом: откуда приходят письма?
Я всегда думал, что основной ход событий был такой:
- Отправитель-клиент отправляет электронную почту на SMTP-сервер (хост A) по SMTP-протоколу;
- SMTP-сервер (хост A) выполняет поиск того, куда должна отправляться электронная почта, и связывается с SMTP-сервером (хост B) по SMTP-протоколу;
- SMTP-сервер (хост B) затем принимает электронную почту и связывается с IMAP-сервером (хост B), чтобы волшебным образом (?) Получить почту на этот сервер;
- Получатель-клиент запрашивает у IMAP-сервера (хост B) новые электронные письма, используя протокол IMAP.
И это заставило меня задуматься: как электронная почта попадает с принимающего SMTP-сервера на обслуживающий IMAP-сервер? У них есть протокол для этого? Они просто помещают это в каталог?
Моя собственная попытка найти ответ...
Я видел обычаи /var/mail
каталог - с одним файлом на пользователя - который, кажется, не предназначен для большой пользовательской базы. Не приведет ли это также к проблемам, когда два процесса читают / записывают данные одновременно?
Я также видел Постфикс main.cf
файл может содержать mailbox_transport = lmtp:unix:/var/imap/socket/lmtp
, который выглядит как протокол LMTP, используемый для связи с сервером IMAP через сокет unix. Что бы указывать на IMAP-сервер также "говорящий" LMTP?
Есть ли другие методы, которые используются? Или другие протоколы?
1 ответ
Наиболее распространенные способы передачи с сервера MTA (SMTP) и сервера IMAP:
SMTP и IMAP - это сервер от одного и того же сервера или серверы от одного и того же поставщика - можно использовать любой проприетарный (секретный / недокументированный) протокол / метод
[AFAIK это не распространенное решение Linux/ Unix]Протокол LMTP (небольшая модификация SMTP) - современные рекомендации
MTA выполняет пользовательскую программу, предоставляемую сервером IMAP, и (обычно) передает сообщение в стандартный ввод программы
MTA помещает сообщение в Maildir для каждого пользователя (например, ~/.maildir/), IMAP использует тот же (общий) maildir
MTA помещает входящие сообщения в стандартный unix для каждого файла почтового ящика пользователя (/var/mail/username), а сервер IMAP использует этот файл в качестве папки INBOX
Сложная задача - заставить MTA отклонить несуществующих виртуальных пользователей IMAP (учетная запись электронной почты без учетной записи ОС учетной записи электронной почты) в ответ на RCPT TO:
в сеансе SMTP. MTA должен знать действительные виртуальные почтовые ящики.