Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
require "net/smtp"smtp = Net::SMTP.new("smtp-server.fake1.com")smtp.startsmtp.ready("[email protected]", "[email protected]") do |obj| obj.write "Пошли вдвоем, пожалуй.rn" obj.write "Уж вечер небо навзничью распялоrn" obj.write "Как пациента под ножом наркоз... rn"endОтметим, что пары символов «возврат каретки», «перевод строки» обязательны (если вы хотите разбить сообщение на строчки). Читатели, знакомые с деталями протокола, обратят внимание на то, что сообщение «завершается» (добавляется точка и слово «QUIT») без нашего участия.
Можно вместо метода
writesmtp.ready("[email protected]", "[email protected]") do |obj| obj << "В гостиной разговаривают тетиrn" obj << "О Микеланджело Буонаротти.rn"endИ еще одно небольшое усовершенствование: мы добавим метод
putsclass Net::NetPrivate::WriteAdapter def puts(args) args << "rn" self.write(*args) endendНовый метод позволяет формировать сообщение и так:
smtp.ready("[email protected]", "[email protected]") do |obj| obj.puts "Мы были призваны в глухую глубину," obj.puts "В мир дев морских, в волшебную страну," obj.puts "Но нас окликнули - и мы пошли ко дну."endЕсли всего изложенного вам не хватает, поэкспериментируйте самостоятельно. А если соберетесь написать новый интерфейс к протоколу SMTP, не стесняйтесь.
18.2.5. Взаимодействие с IMAP-сервером
Протокол IMAP нельзя назвать вершиной совершенства, но во многих отношениях он превосходит POP3. Сообщения могут храниться на сервере сколь угодно долго (с индивидуальными пометками «прочитано» и «не прочитано»). Для хранения сообщений можно организовать иерархию папок. Этих возможностей уже достаточно для того, чтобы считать протокол IMAP более развитым, чем POP3.
Для взаимодействия с IMAP-сервером предназначена стандартная библиотека
net/imaprequire 'net/imap'host = "imap.hogwarts.edu"user, pass = "lupin", "riddikulus"imap = Net::IMAP.new(host)begin imap.login(user, pass) # Или иначе: # imap.authenticate("LOGIN", user, pass)rescue Net::IMAP::NoResponseError abort "He удалось аутентифицировать пользователя #{user}"end# Продолжаем работу...imap.logout # Разорвать соединение.Установив соединение, можно проверить почтовый ящик методом examine; по умолчанию почтовый ящик в IMAP называется INBOX. Метод responses возвращает информацию из почтового ящика в виде хэша массивов (наиболее интересные данные находятся в последнем элементе массива). Показанный ниже код показывает общее число сообщений в почтовом ящике (
"EXISTS""RESENT"imap.examine("INBOX")total = imap.responses["EXISTS"].last # Всего сообщений.recent = imap.responses["RECENT"].last # Непрочитанных сообщений.imap.close # Закрыть почтовый ящик.Отметим, что метод
examineselectПочтовые ящики в протоколе IMAP организованы иерархически, как имена путей в UNIX. Для манипулирования почтовыми ящиками предусмотрены методы
createdeleterenameimap.create("lists")imap.create("lists/ruby")imap.create("lists/rails")imap.create("lists/foobar")# Уничтожить последний созданный ящик:imap.delete("lists/foobar")Имеются также методы
listlsubstatusМетод
searchfetchmsgs = imap.search("ТО","lupin")msgs.each do |mid| env = imap.fetch(mid, "ENVELOPE")[0].attr["ENVELOPE"] puts "От #{env.from[0].name} #{env.subject}"
