Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

• source — строка или массив (или любой объект, у которого есть итератор

each
, возвращающий на каждой итерации одну строку);

• sender — строка, записываемая в поле «from» сообщения;

• recipients — строка или массив строк, описывающие одного или нескольких получателей.

Вот пример отправки сообщения с помощью методов класса:

require 'net/smtp'

msg = <<EOF

Subject: Разное

... пришла пора

Подумать
о делах:

О башмаках, о сургуче,

Капусте, королях.

И почему, как суп в котле,

Кипит вода в морях.

EOF

Net::SMTP.start("smtp-server.fake.com") do |smtp|

 smtp.sendmail msg, 'walrus@fake1.com', 'alice@fake2.com'

end

Поскольку в начале строки находится слово

Subject:
, то получатель сообщения увидит тему
Разное
.

Имеется также метод экземпляра

start
, который ведет себя практически так же, как метод класса. Поскольку почтовый сервер определен в методе
new
, то задавать его еще и в методе
start
не нужно. Поэтому этот параметр пропускается, а остальные не отличаются от параметров, передаваемых методу класса. Следовательно, сообщение можно послать и с помощью объекта SMTP:

require 'net/smtp'

msg = <<EOF

Subject: Ясно и логично

"С другой стороны, - добавил Тарарам, -

если все так и было, то все именно так и было.

Если же все было бы так, то все не могло бы быть

не так. Но поскольку все было не совсем так, все

было совершенно не так. Ясно и логично!"

EOF

smtp = Net::SMTP.new("smtp-server.fake.com")

smtp.start

smtp.sendmail msg, 'tweedledee@fake1.com', 'alice@fake2.com'

Если вы еще не запутались, добавим, что метод экземпляра может принимать ещё и блок:

require 'net/smtp'

msg = <<EOF

Subject: Моби Дик

Зовите меня Измаил.

EOF

addressees = ['readerl@fake2.com', 'reader2@fake3.com']

smtp = Net::SMTP.new("smtp-server.fake.com")

smtp.start do |obj|

 obj.sendmail msg, 'narrator@fake1.com', addressees

end

Как видно из примера, объект, переданный в блок (

obj
), не обязан называться так же, как объект, от имени которого вызывается метод (
smtp
). Кроме того, хочу подчеркнуть: несколько
получателей можно представить в виде массива строк.

Существует еще метод экземпляра со странным названием

ready
. Он похож на
sendmail
, но есть и важные различия. Задаются только отправитель и получатели, тело же сообщения конструируется с помощью объекта
adapter
класса
Net::NetPrivate::WriteAdapter
, у которого есть методы
write
и
append
. Адаптер передается в блок, где может использоваться произвольным образом [17] :

17

В тексте приводится отрывок из стихотворения Т.Элиота «Песнь любви Дж. Альфреда Пруфрока» (пер. В.Топорова). — Прим. перев.

require "net/smtp"

smtp = Net::SMTP.new("smtp-server.fake1.com")

smtp.start

smtp.ready("t.s.eliot@fake1.com", "reader@fake2.com") do |obj|

 obj.write "Пошли вдвоем, пожалуй.\r\n"

 obj.write "Уж вечер небо навзничью распяло\r\n"

 obj.write "Как пациента под ножом наркоз... \r\n"

end

Отметим, что пары символов «возврат каретки», «перевод строки» обязательны (если вы хотите разбить сообщение на строчки). Читатели, знакомые с деталями протокола, обратят внимание на то, что сообщение «завершается» (добавляется точка и слово «QUIT») без нашего участия.

Можно вместо метода

write
воспользоваться оператором конкатенации:

smtp.ready("t.s.eliot@fake1.com", "reader@fake2.com") do |obj|

 obj << "В гостиной разговаривают тети\r\n"

 obj << "О Микеланджело Буонаротти.\r\n"

end

И еще одно небольшое усовершенствование: мы добавим метод

puts
, который вставит в сообщение символы перехода на новую строку:

class Net::NetPrivate::WriteAdapter

 def puts(args)

args << "\r\n"

self.write(*args)

 end

end

Новый метод позволяет формировать сообщение и так:

smtp.ready("t.s.eliot@fake1.com", "reader@fake2.com") do |obj|

 obj.puts "Мы были призваны в глухую глубину,"

 obj.puts "В мир дев морских, в волшебную страну,"

 obj.puts "Но нас окликнули - и мы пошли ко дну."

end

Если всего изложенного вам не хватает, поэкспериментируйте самостоятельно. А если соберетесь написать новый интерфейс к протоколу SMTP, не стесняйтесь.

Поделиться:
Популярные книги

Воплощение Похоти

Некрасов Игорь
1. Воплощение Похоти
Фантастика:
юмористическое фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Воплощение Похоти

Тринадцатый XIII

NikL
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тринадцатый XIII

Лекарь Империи 5

Карелин Сергей Витальевич
5. Лекарь Империи
Фантастика:
городское фэнтези
аниме
героическая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 5

Сильнейший Столп Империи. Книга 4

Ермоленков Алексей
4. Сильнейший Столп Империи
Фантастика:
фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 4

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Неудержимый. Книга XXII

Боярский Андрей
22. Неудержимый
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXII

Надуй щеки! Том 5

Вишневский Сергей Викторович
5. Чеболь за партой
Фантастика:
попаданцы
дорама
7.50
рейтинг книги
Надуй щеки! Том 5

Локки 11. Потомок бога

Решетов Евгений Валерьевич
11. Локки
Фантастика:
героическая фантастика
боевая фантастика
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Локки 11. Потомок бога

Лекарь Империи

Карелин Сергей Витальевич
1. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи

Я Гордый часть 6

Машуков Тимур
6. Стальные яйца
Фантастика:
фэнтези
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 6

Шайтан Иван 6

Тен Эдуард
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.00
рейтинг книги
Шайтан Иван 6

Вперед в прошлое 11

Ратманов Денис
11. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 11

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

Император Пограничья 4

Астахов Евгений Евгеньевич
4. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 4