Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
endКоманда
fetchВ протоколе IMAP есть понятия UID (уникального идентификатора) и порядкового номера сообщения. Обычно методы типа
fetchuid_fetchБиблиотека
net/imap18.2.6. Кодирование и декодирование вложений
Для вложения в почтовое сообщение или в сообщение, отправляемое в конференцию, файл обычно кодируется. Как правило, применяется кодировка
base64packmbin = File.read("new.gif")str = [bin].pack("m") # str закодирована.orig = str.unpack("m")[0] # orig == binСтарые почтовые клиенты работали с кодировкой uuencode/uudecode. В этом случае вложение просто добавляется в конец текста сообщения и ограничивается строками
beginendbeginpackuuencode# Предположим, что mailtext содержит текст сообщения.filename = "new.gif"bin = File.read(filename)encoded = [bin].pack("u")mailtext << "begin 644 #{filename}"mailtext << encodedmailtext << "end"# ...На принимающей стороне мы должны извлечь закодированную информацию и декодировать ее методом
unpack# ...# Предположим, что 'attached' содержит закодированные данные# (включая строки begin и end).lines = attached.split("n")filename = /begin ddd (.*)/.scan(lines[0]).first.firstencoded = lines[1..-2].join("n")decoded = encoded.unpack("u") # Все готово к записи в файл.Современные почтовые клиенты работают с почтой в формате MIME; даже текстовая часть сообщения обернута в конверт (хотя клиент удаляет все заголовки, прежде чем показать сообщение пользователю).
Подробное рассмотрение формата MIME заняло бы слишком много места, да и не относится к рассматриваемой теме. Но в следующем простом примере показано, как можно закодировать и отправить сообщение, содержащее текстовую часть и двоичное вложение. Двоичные куски обычно представлены в кодировке
base64require 'net/smtp'def text_plus_attachment(subject, body, filename) marker = "MIME_boundary" middle = "--#{marker}n" ending = "--#{middle}--n" content = "Content-Type: Multipart/Related; " + "boundary=#{marker}; " + "typw=text/plain" head1 = <<-EOFMIME-Version: 1.0#{content}Subject: #{subject} EOF binary = File.read(filename) encoded = [binary].pack("m") # base64 head2 = <<EOFContent-Description: "#{filename}"Content-Type: image/gif; name="#{filename}"Content-Transfer-Encoding: Base64Content-Disposition: attachment; filename="#{filename}" EOF # Возвращаем... head1 + middle + body + middle + head2 + encoded + endingenddomain = "someserver.com"smtp = "smtp.#{domain}"user, pass = "elgar","enigma"body = <<EOFЭто мое сообщение. Особоговорить не о чем. Я вложилнебольшой GIF-файл. -- БобEOFmailtext = text_plus_attachment("Привет...",body,"new.gif")Net::SMTP.start(smtp, 25, domain, user, pass, :plain) do |mailer| mailer.sendmail(mailtext, '[email protected]', ['[email protected]'])end18.2.7. Пример: шлюз между почтой и конференциями
В онлайновых сообществах общение происходит разными способами. К наиболее распространенным относятся списки рассылки и конференции (новостные группы).
