18.2.3. Взаимодействие с РОР-сервером

18.2.3. Взаимодействие с РОР-сервером

Многие серверы электронной почты пользуются почтовым протоколом (Post Office Protocol — POP). Имеющийся в Ruby класс POP3 позволяет просматривать заголовки и тела всех сообщений, хранящихся для вас на сервере, и обрабатывать их как вы сочтете нужным. После обработки сообщения можно удалить.

Для создания объекта класса Net::POP3 нужно указать доменное имя или IP-адрес сервера; номер порта по умолчанию равен 110. Соединение устанавливается только после вызова метода start (которому передается имя и пароль пользователя).

Вызов метода mails созданного объекта возвращает массив объектов класса POPMail. (Имеется также итератор each для перебора этих объектов.)

Объект POPMail соответствует одному почтовому сообщению. Метод header получает заголовки сообщения, а метод all — заголовки и тело (у метода all, как мы вскоре увидим, есть и другие применения).

Фрагмент кода стоит тысячи слов. Вот пример обращения к серверу с после дующей распечаткой темы каждого сообщения:

require "net/pop"

pop = Net::POP3.new("pop.fakedomain.org")

pop.start("gandalf", "mellon") # Имя и пароль пользователя.

pop.mails.each do |msg|

 puts msg.header.grep /^Subject: /

end

Метод delete удаляет сообщение с сервера. (Некоторые серверы требуют, чтобы POP-соединение было закрыто методом finish, только тогда результат удаления становится необратимым.) Вот простейший пример фильтра спама:

require "net/pop"

pop = Net::POP3.new("pop.fakedomain.org")

pop.start("gandalf", "mellon") # Имя и пароль пользователя.

pop.mails.each do |msg|

 if msg.all =~ /.*make money fast.*/

  msg.delete

 end

end

pop.finish

Отметим, что при вызове метода start можно также задавать блок. По аналогии с методом File.open в этом случае открывается соединение, исполняется блок, а затем соединение закрывается.

Метод all также можно вызывать с блоком. В блоке просто перебираются все строки сообщения, как если бы мы вызвали итератор each для строки, возвращенной методом all.

# Напечатать все строки в обратном порядке... полезная штука!

msg.all { |line| print line.reverse }

# To же самое...

msg.all.each { |line| print line.reverse }

Методу all можно также передать объект. В таком случае для каждой строчки (line) в полученной строке (string) будет вызван оператор конкатенации (<<). Поскольку в различных объектах он может быть определен по-разному, в результате такого обращения возможны самые разные действия:

arr = []       # Пустой массив.

str = "Mail: " # String.

out = $stdout  # Объект IO.

msg.all(arr)   # Построить массив строчек.

msg.all(str)   # Конкатенировать с str.

msg.all(out)   # Вывести на stdout.

Наконец, покажем еще, как вернуть только тело сообщения, игнорируя все заголовки.

module Net

 class POPMail

  def body

   # Пропустить байты заголовка

   self.all[self.header.size..-1]

  end

 end

end

Если вы предпочитаете протокол IMAP, а не POP3, обратитесь к разделу 18.2.5

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

Установление клиентского соединения с сервером

Из книги автора

Установление клиентского соединения с сервером Если имеется сервер с сокетом в режиме прослушивания, клиент может соединиться с ним при помощи функции connect.  int connect(SOCKET s, LPSOCKADDR lpName, int nNameLen);  Параметрыs — сокет, созданный с использованием функции socket.lpName — указатель на


17.4.3. Соединение с сервером

Из книги автора

17.4.3. Соединение с сервером Процесс соединения с сервером через сокет домена Unix состоит из создания сокета и присоединения к требуемому адресу через функцию connect(). Как только сокет присоединен, он может обрабатываться как любой другой файловый дескриптор.Следующая


Работа с FTP-сервером

Из книги автора

Работа с FTP-сервером ftp_connectПроизводит подключение к FTP-серверу.Синтаксис:int ftp_connect(string host [, int port])В функции ftp_connect() аргумент host указывает имя сервера, к которому производится подключение, а необязательный аргумент port указывает какой порт нужно использовать (по умолчанию


Пример: передача текстовых строк между клиентом и сервером

Из книги автора

Пример: передача текстовых строк между клиентом и сервером Изменим наш сервер так, чтобы он, по-прежнему принимая текстовую строку от клиента, предполагал, что строка содержит два целых числа, разделенных пробелом, и возвращал сумму этих чисел. Функции main наших клиента и


Взаимодействие с DNS-сервером

Из книги автора

Взаимодействие с DNS-сервером Если вы хотите, чтобы к клиенту DHCP мог непосредственно обратиться любой узел сети, добиться этого можно двумя способами. Вы можете сконфигурировать сервер DHCP так, чтобы он предоставлял клиенту фиксированный IP-адрес (необходимые действия


Настройка X-клиента для работы с Х-сервером

Из книги автора

Настройка X-клиента для работы с Х-сервером Независимо от того, используете ли вы xhost или xauth, вы должны сконфигурировать клиентскую систему для работы с нужным X-сервером. Если, например, вы работаете за компьютером term.threeroomco.com, зарегистрировались на узле biggie.threeroomco.com и


Использование клиента VNC для взаимодействия с сервером

Из книги автора

Использование клиента VNC для взаимодействия с сервером Программа, реализующая функции клиента VNC в системе Linux, называется vncviewer. Для вызова клиента надо ввести имя программы и, возможно, имя сервера и номер дисплея.$ vncviewer vncserv.threeroomco.com:1VNC server supports protocol version 3.3 (viewer 3.3)Password:При


Резервное копирование, инициируемое сервером

Из книги автора

Резервное копирование, инициируемое сервером При выполнении копирования, инициируемого сервером, на компьютере, к которому подключен накопитель (сервере резервного копирования), выполняется клиентская программа, поддерживающая сетевое соединение с клиентом


Резервное копирование, инициируемое сервером

Из книги автора

Резервное копирование, инициируемое сервером Как было сказано ранее, резервное копирование, инициируемое сервером, дает возможность составить график создания резервных копий и соблюдать его. При этом основные действия по настройке производятся на компьютере,


Взаимодействие с сервером DHCP

Из книги автора

Взаимодействие с сервером DHCP Если в вашей сети IP-адреса распределяются посредством сервера DHCP, вы не сможете задавать фиксированные адреса в конфигурационном файле зоны, так как адрес, выделенный клиенту DHCP, становится известным лишь при его загрузке и может измениться


10.4. Команды управления сервером DNS

Из книги автора

10.4. Команды управления сервером DNS Для управления сервером DNS используется программа ndc. Ее можно использовать с параметрами start, stop, reload, restart.Параметр start запускает сервер, a stop — останавливает. Параметр reload перезагружает файлы зоны, если в них произошли изменения, а


Как настроить Internet Explorer на работу с прокси-сервером

Из книги автора

Как настроить Internet Explorer на работу с прокси-сервером Для настройки Internet Explorer на работу с прокси-сервером:1. В меню Сервис выбираем Свойства обозревателя.2. Переходим на вкладку Подключения (рис. 10.9). 3. Если у вас используется модемное соединение (Dial-up), нужно выбрать его и


11.4. Работа с сервером

Из книги автора

11.4. Работа с сервером Если бы демонстрационную программу нужно было распространять в виде исходных текстов, сопровождать и переносить на другие платформы, потребовалось бы упаковать ее с помощью GNU-утилит Automake и Autoconf. Но их рассмотрение выходит за рамки нашей


Работа со встроенным сервером

Из книги автора

Работа со встроенным сервером Встроенный сервер для Windows имеет те же возможности, что и Суперсервер, за исключением поддержки множества пользователей и защиты по паролю. Клиентская библиотека включена в сервер, и эта объединенная пара выполняет работу как клиента, так и


Аутентификация пользователя сервером

Из книги автора

Аутентификация пользователя сервером Пользователь А отправляет на сервер В запрос, состоящий из билета, который был прислан в ответе ЦРК, и аутентификатора, который содержит текущее значение даты и времени, зашифрованное ключом KAB ( KAB - сеансовый ключ для пользователя