Spec-Zone.ru › Ruby 2.3

class Net::POP3

Parent:
Protocol

Что представляет собой эта библиотека?

Эта библиотека предоставляет функциональность для получения электронной почты через POP3, Протокол почтового отделения версии 3. Подробности о POP3 см. в [RFC1939] (www.ietf.org/rfc/rfc1939.txt).

Примеры

Получение сообщений

В этом примере извлекаются сообщения с сервера и удаляются с него.

Сообщения записываются в файлы с именами 'inbox/1', 'inbox/2', .… Замените 'pop.example.com' на адрес вашего сервера POP3, а 'YourAccount' и 'YourPassword' на соответствующие данные учетной записи.

require 'net/pop'

pop = Net::POP3.new('pop.example.com')
pop.start('YourAccount', 'YourPassword')             # (1)
if pop.mails.empty?
  puts 'No mail.'
else
  i = 0
  pop.each_mail do |m|   # or "pop.mails.each ..."   # (2)
    File.open("inbox/#{i}", 'w') do |f|
      f.write m.pop
    end
    m.delete
    i += 1
  end
  puts "#{pop.mails.size} mails popped."
end
pop.finish                                           # (3)
  1. Вызовите #start и начните сеанс POP.

  2. Получайте доступ к сообщениям с помощью #each_mail и/или #mails.

  3. Закройте сеанс POP, вызвав #finish или используйте блочную форму start.

Укороченный код

Приведенный выше пример достаточно подробен. Можно сократить код, используя некоторые вспомогательные методы. Во-первых, можно использовать блочную форму ::start вместо ::new, #start и #finish.

require 'net/pop'

Net::POP3.start('pop.example.com', 110,
                'YourAccount', 'YourPassword') do |pop|
  if pop.mails.empty?
    puts 'No mail.'
  else
    i = 0
    pop.each_mail do |m|   # or "pop.mails.each ..."
      File.open("inbox/#{i}", 'w') do |f|
        f.write m.pop
      end
      m.delete
      i += 1
    end
    puts "#{pop.mails.size} mails popped."
  end
end

#delete_all — это альтернатива each_mail и удалению.

require 'net/pop'

Net::POP3.start('pop.example.com', 110,
                'YourAccount', 'YourPassword') do |pop|
  if pop.mails.empty?
    puts 'No mail.'
  else
    i = 1
    pop.delete_all do |m|
      File.open("inbox/#{i}", 'w') do |f|
        f.write m.pop
      end
      i += 1
    end
  end
end

И вот еще более короткий пример.

require 'net/pop'

i = 0
Net::POP3.delete_all('pop.example.com', 110,
                     'YourAccount', 'YourPassword') do |m|
  File.open("inbox/#{i}", 'w') do |f|
    f.write m.pop
  end
  i += 1
end

Вопросы использования оперативной памяти

Все приведенные выше примеры получают каждое сообщение как одну длинную строку. Этот пример этого избегает.

require 'net/pop'

i = 1
Net::POP3.delete_all('pop.example.com', 110,
                     'YourAccount', 'YourPassword') do |m|
  File.open("inbox/#{i}", 'w') do |f|
    m.pop do |chunk|    # get a message little by little.
      f.write chunk
    end
    i += 1
  end
end

Использование APOP

Библиотека net/pop поддерживает аутентификацию APOP. Для использования APOP используйте класс Net::APOP вместо класса Net::POP3. Можно использовать вспомогательный метод Net::POP3.APOP(). Например:

require 'net/pop'

# Use APOP authentication if $isapop == true
pop = Net::POP3.APOP($is_apop).new('apop.example.com', 110)
pop.start(YourAccount', 'YourPassword') do |pop|
  # Rest of the code is the same.
end

Получение только выбранных сообщений с помощью команды POP 'UIDL'

Если ваш сервер POP предоставляет функциональность UIDL, вы можете получить только выбранные сообщения с сервера POP. Например:

def need_pop?( id )
  # determine if we need pop this mail...
end

Net::POP3.start('pop.example.com', 110,
                'Your account', 'Your password') do |pop|
  pop.mails.select { |m| need_pop?(m.unique_id) }.each do |m|
    do_something(m.pop)
  end
end

Метод Net::POPMail#unique_id возвращает уникальный идентификатор сообщения в виде строки. Обычно уникальный идентификатор — это хэш сообщения.

Константы

Revision

номер SVN этой библиотеки

Атрибуты

address[R]

Адрес для подключения.

open_timeout[RW]

Секунды ожидания открытия соединения. Если объект POP3 не может открыть соединение в течение этого времени, он генерирует исключение Net::OpenTimeout. Значение по умолчанию — 30 секунд.

read_timeout[R]

Секунды ожидания чтения одного блока (одним вызовом read(1)). Если объект POP3 не может завершить чтение в течение этого времени, он генерирует исключение Net::ReadTimeout. Значение по умолчанию — 60 секунд.

Публичные методы класса

APOP(isapop) Показать исходный код
# File lib/net/pop.rb, line 239
def POP3.APOP(isapop)
  isapop ? APOP : POP3
end

Возвращает класс APOP, если isapop равно true; в противном случае, возвращает класс POP. Например:

# Example 1
pop = Net::POP3::APOP($is_apop).new(addr, port)

# Example 2
Net::POP3::APOP($is_apop).start(addr, port) do |pop|
  ....
end
auth_only(address, port = nil, account = nil, password = nil, isapop = false) Показать исходный код
# File lib/net/pop.rb, line 306
def POP3.auth_only(address, port = nil,
                   account = nil, password = nil,
                   isapop = false)
  new(address, port, isapop).auth_only account, password
end

Открывает сеанс POP3, пытается выполнить аутентификацию и завершает сеанс.

Этот метод генерирует исключение POPAuthenticationError, если аутентификация не удалась.

Пример: обычный POP3

Net::POP3.auth_only('pop.example.com', 110,
                    'YourAccount', 'YourPassword')

Пример: APOP

Net::POP3.auth_only('pop.example.com', 110,
                    'YourAccount', 'YourPassword', true)
certs() Показать исходный код
# File lib/net/pop.rb, line 378
def POP3.certs
  return @ssl_params[:ca_file] || @ssl_params[:ca_path]
end

возвращает :ca_file или :ca_path из ::ssl_params

create_ssl_params(verify_or_params = {}, certs = nil) Показать исходный код
# File lib/net/pop.rb, line 338
def POP3.create_ssl_params(verify_or_params = {}, certs = nil)
  begin
    params = verify_or_params.to_hash
  rescue NoMethodError
    params = {}
    params[:verify_mode] = verify_or_params
    if certs
      if File.file?(certs)
        params[:ca_file] = certs
      elsif File.directory?(certs)
        params[:ca_path] = certs
      end
    end
  end
  return params
end

Строит правильные параметры из аргументов

default_pop3_port() Показать исходный код
# File lib/net/pop.rb, line 211
def POP3.default_pop3_port
  110
end

Порт по умолчанию для подключений POP3, порт 110

default_pop3s_port() Показать исходный код
# File lib/net/pop.rb, line 216
def POP3.default_pop3s_port
  995
end

Порт по умолчанию для подключений POP3S, порт 995

default_port() Показать исходный код
# File lib/net/pop.rb, line 206
def POP3.default_port
  default_pop3_port()
end

возвращает порт для POP3

delete_all(address, port = nil, account = nil, password = nil, isapop = false, &block) Показать исходный код
# File lib/net/pop.rb, line 284
def POP3.delete_all(address, port = nil,
                    account = nil, password = nil,
                    isapop = false, &block)
  start(address, port, account, password, isapop) {|pop|
    pop.delete_all(&block)
  }
end

Инициализирует сеанс POP3 и удаляет все сообщения на сервере. Если указан блок, каждый объект POPMail передается ему перед удалением.

Этот метод генерирует исключение POPAuthenticationError, если аутентификация не удалась.

Пример

Net::POP3.delete_all('pop.example.com', 110,
                     'YourAccount', 'YourPassword') do |m|
  file.write m.pop
end
disable_ssl() Показать исходный код
# File lib/net/pop.rb, line 356
def POP3.disable_ssl
  @ssl_params = nil
end

Отключить SSL для всех новых экземпляров.

Net::POP.enable_ssl(params = {}) Показать исходный код
# File lib/net/pop.rb, line 333
def POP3.enable_ssl(*args)
  @ssl_params = create_ssl_params(*args)
end

Включить SSL для всех новых экземпляров. params передаётся в OpenSSL::SSLContext#set_params.

foreach(address, port = nil, account = nil, password = nil, isapop = false) { |message| ... } Показать исходный код
# File lib/net/pop.rb, line 263
def POP3.foreach(address, port = nil,
                 account = nil, password = nil,
                 isapop = false, &block)  # :yields: message
  start(address, port, account, password, isapop) {|pop|
    pop.each_mail(&block)
  }
end

Инициализирует сеанс POP3 и перебирает каждый объект POPMail, передавая его в block. Этот метод эквивалентен:

Net::POP3.start(address, port, account, password) do |pop|
  pop.each_mail do |m|
    yield m
  end
end

Этот метод генерирует исключение POPAuthenticationError, если аутентификация не удалась.

Пример

Net::POP3.foreach('pop.example.com', 110,
                  'YourAccount', 'YourPassword') do |m|
  file.write m.pop
  m.delete if $DELETE
end
new(addr, port = nil, isapop = false) Показать исходный код
# File lib/net/pop.rb, line 418
def initialize(addr, port = nil, isapop = false)
  @address = addr
  @ssl_params = POP3.ssl_params
  @port = port
  @apop = isapop

  @command = nil
  @socket = nil
  @started = false
  @open_timeout = 30
  @read_timeout = 60
  @debug_output = nil

  @mails = nil
  @n_mails = nil
  @n_bytes = nil
end

Создаёт новый объект POP3.

address — имя хоста или IP-адрес вашего сервера POP3.

Необязательный port — порт для подключения.

Необязательный isapop указывает, будет ли использоваться аутентификация APOP; по умолчанию false.

Этот метод не открывает TCP-соединение.

ssl_params() Показать исходный код
# File lib/net/pop.rb, line 363
def POP3.ssl_params
  return @ssl_params
end

возвращает параметры SSL

см. также ::enable_ssl

start(address, port = nil, account = nil, password = nil, isapop = false) { |pop| ... } Показать исходный код
# File lib/net/pop.rb, line 402
def POP3.start(address, port = nil,
               account = nil, password = nil,
               isapop = false, &block)   # :yield: pop
  new(address, port, isapop).start(account, password, &block)
end

Создаёт новый объект POP3 и открывает соединение. Эквивалентно

Net::POP3.new(address, port, isapop).start(account, password)

Если block предоставлен, передаёт открытый объект POP3 в него и автоматически закрывает его по завершении сеанса.

Пример

Net::POP3.start(addr, port, account, password) do |pop|
  pop.each_mail do |m|
    file.write m.pop
    m.delete
  end
end
use_ssl?() Показать исходный код
# File lib/net/pop.rb, line 368
def POP3.use_ssl?
  return !@ssl_params.nil?
end

возвращает true если установлен ::ssl_params

verify() Показать исходный код
# File lib/net/pop.rb, line 373
def POP3.verify
  return @ssl_params[:verify_mode]
end

возвращает, включён ли режим проверки verify_mode из ::ssl_params

Методы экземпляра публичного интерфейса

active?()
Псевдоним для: started?
apop?() Показать исходный код
# File lib/net/pop.rb, line 437
def apop?
  @apop
end

Использует ли этот экземпляр аутентификацию APOP?

auth_only(account, password) Показать исходный код
# File lib/net/pop.rb, line 315
def auth_only(account, password)
  raise IOError, 'opening previously opened POP session' if started?
  start(account, password) {
    ;
  }
end

Запускает сеанс pop3, пытается выполнить аутентификацию и завершает его. Этот метод не должен вызываться, пока открыт сеанс POP3. Этот метод вызывает POPAuthenticationError, если аутентификация не удалась.

delete_all() { |message| ... } Показать исходный код
# File lib/net/pop.rb, line 687
def delete_all # :yield: message
  mails().each do |m|
    yield m if block_given?
    m.delete unless m.deleted?
  end
end

Удаляет все сообщения на сервере.

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

Пример

n = 1
pop.delete_all do |m|
  File.open("inbox/#{n}") do |f|
    f.write m.pop
  end
  n += 1
end

Этот метод вызывает исключение POPError, если произошла ошибка.

disable_ssl() Показать исходный код
# File lib/net/pop.rb, line 464
def disable_ssl
  @ssl_params = nil
end

Отключает SSL для всех новых экземпляров.

each()
Псевдоним для: each_mail
each_mail() { |message| ... } Показать исходный код
# File lib/net/pop.rb, line 665
def each_mail(&block)  # :yield: message
  mails().each(&block)
end

Поочередно передаёт каждое сообщение в переданный блок. Эквивалентно:

pop3.mails.each do |popmail|
  ....
end

Этот метод вызывает исключение POPError, если произошла ошибка.

Также алиас для: each
Net::POP#enable_ssl(params = {}) Показать исходный код
# File lib/net/pop.rb, line 453
def enable_ssl(verify_or_params = {}, certs = nil, port = nil)
  begin
    @ssl_params = verify_or_params.to_hash.dup
    @port = @ssl_params.delete(:port) || @port
  rescue NoMethodError
    @ssl_params = POP3.create_ssl_params(verify_or_params, certs)
    @port = port || @port
  end
end

Включает SSL для этого экземпляра. Должен быть вызван до установления соединения, чтобы иметь какой-либо эффект. +params+ — порт для установления SSL-соединения; по умолчанию 995. params (кроме :port) передаётся в OpenSSL::SSLContext#set_params.

finish() Показать исходный код
# File lib/net/pop.rb, line 586
def finish
  raise IOError, 'POP session not yet started' unless started?
  do_finish
end

Завершает сеанс POP3 и закрывает TCP-соединение.

inspect() Показать исходный код
# File lib/net/pop.rb, line 469
def inspect
  "#<#{self.class} #{@address}:#{@port} open=#{@started}>"
end

Предоставляет строковое представление состояния класса в удобочитаемом виде.

logging(msg) Показать исходный код
# File lib/net/pop.rb, line 712
def logging(msg)
  @debug_output << msg + "\n" if @debug_output
end

отладочный вывод для msg

mails() Показать исходный код
# File lib/net/pop.rb, line 643
def mails
  return @mails.dup if @mails
  if n_mails() == 0
    # some popd raises error for LIST on the empty mailbox.
    @mails = []
    return []
  end

  @mails = command().list.map {|num, size|
    POPMail.new(num, size, self, command())
  }
  @mails.dup
end

Возвращает массив объектов Net::POPMail, представляющих все сообщения на сервере. Этот массив обновляется при перезапуске сессии; в противном случае он извлекается с сервера при первом вызове этого метода (прямом или косвенном) и кэшируется.

Этот метод вызывает исключение POPError, если произошла ошибка.

n_bytes() Показать исходный код
# File lib/net/pop.rb, line 631
def n_bytes
  return @n_bytes if @n_bytes
  @n_mails, @n_bytes = command().stat
  @n_bytes
end

Возвращает общий размер в байтах всех сообщений на POP-сервере.

n_mails() Показать исходный код
# File lib/net/pop.rb, line 624
def n_mails
  return @n_mails if @n_mails
  @n_mails, @n_bytes = command().stat
  @n_mails
end

Возвращает количество сообщений на POP-сервере.

port() Показать исходный код
# File lib/net/pop.rb, line 494
def port
  return @port || (use_ssl? ? POP3.default_pop3s_port : POP3.default_pop3_port)
end

Номер порта для подключения.

read_timeout=(sec) Показать исходный код
# File lib/net/pop.rb, line 509
def read_timeout=(sec)
  @command.socket.read_timeout = sec if @command
  @read_timeout = sec
end

Установить тайм-аут чтения.

reset() Показать исходный код
# File lib/net/pop.rb, line 697
def reset
  command().rset
  mails().each do |m|
    m.instance_eval {
      @deleted = false
    }
  end
end

Сбрасывает сеанс. Это очищает все метки «удаленных» сообщений.

Этот метод вызывает исключение POPError, если произошла ошибка.

set_debug_output(arg) Показать исходный код
# File lib/net/pop.rb, line 486
def set_debug_output(arg)
  @debug_output = arg
end

ПРЕДУПРЕЖДЕНИЕ: Этот метод создаёт серьёзную уязвимость безопасности. Используйте этот метод только для отладки.

Установить поток вывода для отладки.

Пример

pop = Net::POP.new(addr, port)
pop.set_debug_output $stderr
pop.start(account, passwd) do |pop|
  ....
end
start(account, password) { |pop| ... } Показать исходный код
# File lib/net/pop.rb, line 527
def start(account, password) # :yield: pop
  raise IOError, 'POP session already started' if @started
  if block_given?
    begin
      do_start account, password
      return yield(self)
    ensure
      do_finish
    end
  else
    do_start account, password
    return self
  end
end

Запускает сеанс POP3.

При вызове с блоком передает объект POP3 в блок и закрывает сеанс после завершения вызова блока.

Этот метод вызывает исключение POPAuthenticationError, если аутентификация не удалась.

started?() Показать исходный код
# File lib/net/pop.rb, line 515
def started?
  @started
end

true если сеанс POP3 запущен.

Также алиас для: active?
use_ssl?() Показать исходный код
# File lib/net/pop.rb, line 442
def use_ssl?
  return !@ssl_params.nil?
end

Использует ли этот экземпляр SSL?

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API