Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
require "net/smtp"
smtp = Net::SMTP.new("smtp-server.fake1.com")
smtp.start
smtp.ready("[email protected]", "[email protected]") do |obj|
obj.write "Пошли вдвоем, пожалуй.rn"
obj.write "Уж вечер небо навзничью распялоrn"
obj.write "Как пациента под ножом наркоз... rn"
end
Отметим, что пары символов «возврат каретки», «перевод строки» обязательны (если вы хотите разбить сообщение на строчки). Читатели, знакомые с деталями протокола, обратят внимание на то, что сообщение «завершается» (добавляется точка и слово «QUIT») без нашего участия.
Можно вместо метода
write
smtp.ready("[email protected]", "[email protected]") do |obj|
obj << "В гостиной разговаривают тетиrn"
obj << "О Микеланджело Буонаротти.rn"
end
И еще одно небольшое усовершенствование: мы добавим метод
puts
class Net::NetPrivate::WriteAdapter
def puts(args)
args << "rn"
self.write(*args)
end
end
Новый метод позволяет формировать сообщение и так:
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/imap
require '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 # Закрыть почтовый ящик.
Отметим, что метод
examine
select
Почтовые ящики в протоколе IMAP организованы иерархически, как имена путей в UNIX. Для манипулирования почтовыми ящиками предусмотрены методы
create
delete
rename
imap.create("lists")
imap.create("lists/ruby")
imap.create("lists/rails")
imap.create("lists/foobar")
# Уничтожить последний созданный ящик:
imap.delete("lists/foobar")
Имеются также методы
list
lsub
status
Метод
search
fetch
msgs = imap.search("ТО","lupin")
msgs.each do |mid|
env = imap.fetch(mid, "ENVELOPE")[0].attr["ENVELOPE"]
puts "От #{env.from[0].name} #{env.subject}"