Ответ
POP3 (Post Office Protocol version 3) — это простой протокол прикладного уровня для получения электронной почты с сервера. Его основная идея — «скачать и удалить».
В стандартной библиотеке Go нет встроенного клиента для работы с POP3. Для этого необходимо использовать сторонние библиотеки, например, популярную github.com/emersion/go-pop3
.
Ключевые отличия POP3 от IMAP:
Характеристика | POP3 | IMAP |
---|---|---|
Состояние | Работает в "офлайн" режиме. Письма загружаются на клиентское устройство и (обычно) удаляются с сервера. | Работает в "онлайн" режиме. Письма остаются на сервере, клиент синхронизирует их состояние. |
Доступ с устройств | Рассчитан на доступ с одного устройства. | Идеален для доступа с нескольких устройств (ПК, телефон), так как состояние (прочитано/не прочитано) синхронизируется. |
Работа с папками | Не поддерживает папки на сервере. Есть только "Входящие". | Полная поддержка создания, удаления и переименования папок на сервере. |
Загрузка писем | Обычно загружает письмо целиком (заголовок и тело). | Позволяет выборочно загружать части письма, например, только заголовки или текст без вложений. |
Порты по умолчанию | 110 (нешифрованный), 995 (SSL/TLS) | 143 (нешифрованный), 993 (SSL/TLS) |
Сценарий | «Проверить почту»: скачать все новое, сохранить локально и очистить ящик на сервере. | «Управлять почтой»: работать с письмами на сервере, как с файлами в облаке. |
Пример простого клиента на Go с emersion/go-pop3
:
package main
import (
"log"
"github.com/emersion/go-pop3"
)
func main() {
// Устанавливаем соединение с сервером (для SSL/TLS используйте pop3.DialTLS)
client, err := pop3.Dial("mail.example.com:110")
if err != nil {
log.Fatal(err)
}
defer client.Quit()
// Аутентификация
if err := client.Auth("user", "password"); err != nil {
log.Fatal(err)
}
// Получаем количество сообщений и общий размер
count, size, err := client.Stat()
if err != nil {
log.Fatal(err)
}
log.Printf("Всего сообщений: %d, общий размер: %d байт", count, size)
// Можно пройтись по письмам и получить их
// for i := 1; i <= count; i++ {
// msg, err := client.Retr(i)
// // ... обработка письма ...
// }
}
Таким образом, POP3 — более старый и простой протокол, подходящий для простых задач, в то время как IMAP — более гибкий и современный стандарт для управления почтой на сервере.