Страницы

Поиск по вопросам

Показаны сообщения с ярлыком imap. Показать все сообщения
Показаны сообщения с ярлыком imap. Показать все сообщения

четверг, 13 февраля 2020 г.

Как доставляется электронная почта?

#unix #sendmail #imap #pop3

Я вот не совсем понимаю, как идет доставка сообщений на почтовый сервер? Мы пишем
письмо с user@gmail.com на test@mail.ru. Что происходит на уровне системы? sendmail
(или другой мейл агент) доставляет письмо на указанный сервер (mail.ru) или на другой
(который прописан в mx-записи)? И самое главное - какому сервису он передается? sendmail-sendmail?
Pop3 и imap служат только для того чтобы отдавать почту пользователю? В общем сильно
не пинайте, а объясните концепцию или линк на толковую статью. Спасибо.
    


Ответы

Ответ 1



Предположим, мы написали письмо со своего ящика user@gmail.com для test@mail.ru. Из веб-формы письмо передаётся MTA (Mail Transfer Agent - почтовый агент) Google, который начинает его обработку. MTA может быть любым - sendmail, postfix, MS Exchange и т.п., порядок действий везде одинаковый. Вначале MTA выделяет из адреса отправителя имя домена (в нашем случае - mail.ru) и посылает DNS-запрос "какие MX-записи у этого домена?". Дело в том, что для почты есть свои собственные записи в DNS, так называемые MX-записи (MX - Mail Exchanger), в которых находятся имена (не IP-адреса, а именно имена почтовых серверов домена!). В ответ DNS присылает список имён почтовых серверов. MTA берёт один из полученных имён и посылает DNS-запрос "какой IP у этого имени?". DNS-сервер присылает в ответ адрес (возможно, не один) для имени, после чего MTA соединяется с этим адресом и по стандарному протоколу SMTP (или ESMTP) передаёт письмо почтовому серверу получателя. Сервер получателя кладёт письмо в своё внутреннее хранилище писем для test@mail.ru и ждёт пока пользователь подключится и прочитает свою почту. Пользователь может не использовать web-интерфейс, а подключаться к MTA при помощи отдельной программы - почтового клиента (Mozilla Thunderbird, The Bat и т.п.). Но всё дело в том, что протокол SMTP для этого не подходит, он создан для обмена данными между серверами. Здесь работают два других протокола - POP3 и IMAP. Для клиента разница между ними почти отсутствует, но внутренне они абсолютно непохожи. IMAP более современный и умный, POP3 более старый и поглупее. (Если есть возможность - выставляйте IMAP.) Эти протоколы ответственны за передачу почты между клиентской программой и MTA. Если SMTP однонаправленный (только отправка), то клиентские протоколы двунаправленные (отправка и получение). Есть ещё одна интересная деталь. MX-записей у домена может быть несколько. То есть у домена может быть несколько почтовых серверов. Казалось бы зачем это надо? Ведь у любого DNS-имени может быть несколько IP-адресов (A-записей), так зачем же усложнять картину? А затем, что у MX-записей есть то, чего нет у A-записей - приоритет. Все IP для одного имени равноприоритетны, но для MX-записей можно указывать их "вес". "Вес" - это неотрицательное целое число и чем оно меньше, тем выше приоритет этой записи. MTA всегда вначале пытается соединиться с сервером, имеющим более высокий приоритет и только если ему это не удалось, переходит к серверу с более низким приоритетом.

среда, 5 февраля 2020 г.

Получение почты средствами PHP через IMAP

#php #imap

Доброго всем времени суток господа.
Есть E-mail'ы, логины и пассы к своей почте. Охота средствами PHP с каждой почты
получать E-mail'ы. Просто подключиться к почте по IMAP, затолкать все письма в простой
PHP массив. Без всяких извратов, без удалений писем, просто подключаемся -> делаем
массив с письмами. Что то в роде:
$mails = array(
    array('дата-время','от кого','тема','текст');
    array('дата-время','от кого','тема','текст');
    array('дата-время','кому','тема','текст');
    array('дата-время','кому','тема','текст'); 
    ...
);

И сам уже пытался, и гуголь мучал. Посте двух дней поисков, странно, но больше одного
письма, из всего списка, получить не могу. Подскажете с кодом?
update:

    


Ответы

Ответ 1



Порядок действий примерно такой: Устанавливаем соединение с почтовым сервером с помощью функции imap_open Получаем заголовки писем в ящике с помощью функции imap_fetch_overview. Теперь у нас есть массив писем, в котором содержится msgno, from, to, date, subject и другие параметры, которые мы обычно видим в почтовом клиенте, когда просматриваем ящик. Ну дальше, зная msgno каждого письма получаем его содержимое (текст, вложения) с помощью функций imap_fetchbody, imap_fetchheader, imap_headerinfo, imap_fetch_overview и другие... Все функции здесь. Приводить пример кода не буду, в оф. документации достаточно примеров для каждой из функций. Если не получиться, пишите, будем думать дальше вместе :)

вторник, 16 июля 2019 г.

Библиотека для работы с IMAP

Как без помощи сторонних .net-библиотек работать с входящей почтой по протоколу IMAP?


Ответ

Ответ из комментария:
Насколько я знаю .net framework не содержит реализации из коробки. Не смотрели в сторону open-source библиотек? http://codeproject.com/Articles/8008/IMAP-Client-library-using-C

вторник, 23 апреля 2019 г.

Как доставляется электронная почта?

Я вот не совсем понимаю, как идет доставка сообщений на почтовый сервер? Мы пишем письмо с user@gmail.com на test@mail.ru. Что происходит на уровне системы? sendmail (или другой мейл агент) доставляет письмо на указанный сервер (mail.ru) или на другой (который прописан в mx-записи)? И самое главное - какому сервису он передается? sendmail-sendmail? Pop3 и imap служат только для того чтобы отдавать почту пользователю? В общем сильно не пинайте, а объясните концепцию или линк на толковую статью. Спасибо.


Ответ

Предположим, мы написали письмо со своего ящика user@gmail.com для test@mail.ru. Из веб-формы письмо передаётся MTA (Mail Transfer Agent - почтовый агент) Google, который начинает его обработку. MTA может быть любым - sendmail, postfix, MS Exchange и т.п., порядок действий везде одинаковый.
Вначале MTA выделяет из адреса отправителя имя домена (в нашем случае - mail.ru) и посылает DNS-запрос "какие MX-записи у этого домена?". Дело в том, что для почты есть свои собственные записи в DNS, так называемые MX-записи (MX - Mail Exchanger), в которых находятся имена (не IP-адреса, а именно имена почтовых серверов домена!). В ответ DNS присылает список имён почтовых серверов. MTA берёт один из полученных имён и посылает DNS-запрос "какой IP у этого имени?". DNS-сервер присылает в ответ адрес (возможно, не один) для имени, после чего MTA соединяется с этим адресом и по стандарному протоколу SMTP (или ESMTP) передаёт письмо почтовому серверу получателя. Сервер получателя кладёт письмо в своё внутреннее хранилище писем для test@mail.ru и ждёт пока пользователь подключится и прочитает свою почту.
Пользователь может не использовать web-интерфейс, а подключаться к MTA при помощи отдельной программы - почтового клиента (Mozilla Thunderbird, The Bat и т.п.). Но всё дело в том, что протокол SMTP для этого не подходит, он создан для обмена данными между серверами. Здесь работают два других протокола - POP3 и IMAP. Для клиента разница между ними почти отсутствует, но внутренне они абсолютно непохожи. IMAP более современный и умный, POP3 более старый и поглупее. (Если есть возможность - выставляйте IMAP.) Эти протоколы ответственны за передачу почты между клиентской программой и MTA. Если SMTP однонаправленный (только отправка), то клиентские протоколы двунаправленные (отправка и получение).
Есть ещё одна интересная деталь. MX-записей у домена может быть несколько. То есть у домена может быть несколько почтовых серверов. Казалось бы зачем это надо? Ведь у любого DNS-имени может быть несколько IP-адресов (A-записей), так зачем же усложнять картину? А затем, что у MX-записей есть то, чего нет у A-записей - приоритет. Все IP для одного имени равноприоритетны, но для MX-записей можно указывать их "вес". "Вес" - это неотрицательное целое число и чем оно меньше, тем выше приоритет этой записи. MTA всегда вначале пытается соединиться с сервером, имеющим более высокий приоритет и только если ему это не удалось, переходит к серверу с более низким приоритетом.