Как электронная почта переходит от SMTP к IMAP?

Я работаю над программированием IMAP-сервера, но сталкиваюсь с одним вопросом: откуда приходят письма?

Я всегда думал, что основной ход событий был такой:

  1. Отправитель-клиент отправляет электронную почту на SMTP-сервер (хост A) по SMTP-протоколу;
  2. SMTP-сервер (хост A) выполняет поиск того, куда должна отправляться электронная почта, и связывается с SMTP-сервером (хост B) по SMTP-протоколу;
  3. SMTP-сервер (хост B) затем принимает электронную почту и связывается с IMAP-сервером (хост B), чтобы волшебным образом (?) Получить почту на этот сервер;
  4. Получатель-клиент запрашивает у 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:

  1. SMTP и IMAP - это сервер от одного и того же сервера или серверы от одного и того же поставщика - можно использовать любой проприетарный (секретный / недокументированный) протокол / метод
    [AFAIK это не распространенное решение Linux/ Unix]

  2. Протокол LMTP (небольшая модификация SMTP) - современные рекомендации

  3. MTA выполняет пользовательскую программу, предоставляемую сервером IMAP, и (обычно) передает сообщение в стандартный ввод программы

  4. MTA помещает сообщение в Maildir для каждого пользователя (например, ~/.maildir/), IMAP использует тот же (общий) maildir

  5. MTA помещает входящие сообщения в стандартный unix для каждого файла почтового ящика пользователя (/var/mail/username), а сервер IMAP использует этот файл в качестве папки INBOX

Сложная задача - заставить MTA отклонить несуществующих виртуальных пользователей IMAP (учетная запись электронной почты без учетной записи ОС учетной записи электронной почты) в ответ на RCPT TO: в сеансе SMTP. MTA должен знать действительные виртуальные почтовые ящики.

Другие вопросы по тегам