Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

 ending = "--#{middle}--\n"

 content = "Content-Type: Multipart/Related; " +

"boundary=#{marker}; " +

"typw=text/plain"

 head1 = <<-EOF

MIME-Version: 1.0

#{content}

Subject: #{subject}

 EOF

 binary = File.read(filename)

 encoded = [binary].pack("m") # base64

 head2 = <<EOF

Content-Description: "#{filename}"

Content-Type: image/gif; name="#{filename}"

Content-Transfer-Encoding: Base64

Content-Disposition: attachment; filename="#{filename}"

 EOF

 # Возвращаем...

 head1 + middle + body + middle + head2 + encoded + ending

end

domain = "someserver.com"

smtp = "smtp.#{domain}"

user, pass = "elgar","enigma"

body = <<EOF

Это мое сообщение. Особо

говорить не о чем. Я вложил

небольшой GIF-файл.

– - Боб

EOF

mailtext = text_plus_attachment("Привет...",body,"new.gif")

Net::SMTP.start(smtp, 25, domain, user, pass, :plain) do |mailer|

 mailer.sendmail(mailtext, 'fromthisguy@wherever.com',

['destination@elsewhere.com'])

end

18.2.7. Пример: шлюз между почтой и конференциями

В онлайновых сообществах общение происходит разными способами. К наиболее распространенным относятся списки рассылки и конференции (новостные группы).

Но не каждый хочет подписываться на список рассылки и ежедневно получать десятки сообщений; кто-то предпочитает время от времени заходить в конференцию и просматривать новые сообщения. С другой стороны, есть люди, которым система Usenet кажется слишком медлительной — они хотели бы видеть сообщение, пока еще электроны не успели остыть.

Таким образом, мы имеем ситуацию, когда в сравнительно небольшом закрытом списке рассылки рассматриваются те же темы, что в немодерируемой конференции, открытой всему миру. В конце концов кому-то пришла в голову мысль организовать зеркало — шлюз между обеими системами.

Подобный шлюз подходит не к любой ситуации, но в случае списка рассылки Ruby он вполне годится. Сообщения из конференции нужно скопировать в список, а сообщения, отправляемые в список рассылки, направить также и конференцию.

Эта задача была решена Дэйвом Томасом (Dave Thomas) — конечно, на Ruby, — и с его любезного разрешения мы приводим код в листингах 18.6 и 18.7.

Но сначала небольшое вступление. Мы уже немного познакомились с тем, как отправлять и получать электронную почту, но как быть с конференциями Usenet? Доступ к конференциям обеспечивает протокол NNTP (Network News Transfer Protocol — сетевой протокол передачи новостей). Кстати, создал его Ларри Уолл (Larry Wall), который позже подарил нам язык Perl.

В Ruby нет «стандартной» библиотеки для работы с NNTP. Однако один японский программист (известный нам только по псевдониму greentea) написал прекрасную библиотеку для этой цели.

В библиотеке

nntp.rb
определен модуль
NNTP
, содержащий класс
NNTPIO
. В этом классе имеются, в частности, методы экземпляра
connect
,
get_head
,
get_body
и
post
. Чтобы получить сообщения, необходимо установить соединение с сервером и в цикле вызывать методы
get_head
и
get_body
(мы, правда, немного упрощаем). Чтобы отправить сообщение, нужно сконструировать его заголовки, соединиться с сервером и вызвать метод
post
.

В приведенных ниже программах используется библиотека

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

Файл

params.rb
нужен обеим программам. В нем описаны параметры, управляющие всем процессом зеркалирования: имена серверов, имена пользователей и т.д. Ниже приведен пример, который вы можете изменить самостоятельно. (Все доменные имена, содержащие слово «fake», очевидно, фиктивные.)

  • Читать дальше
  • 1
  • ...
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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