class CliApplication::MailLib::Message

Attributes

body[RW]
charset[RW]
from_email[R]
from_name[RW]
reply_to[R]
subject[RW]

Public Class Methods

new() click to toggle source
Конструктор инициализирует сообщение электронной почты и компоненты сообщения

@return [None] нет

# File lib/cli_application/mail_lib/message.rb, line 16
def initialize
  @charset = 'utf-8'
  @body = ''
  @subject = ''
  @from_email = ''
  @from_name = ''
  @reply_to = ''

  @to = Hash.new
  @cc = Hash.new
  @bcc = Hash.new

  @message_id = ::Time.now.to_s.hash.abs.to_s + '.' + ::Time.now.usec.to_s
end

Public Instance Methods

add_bcc(email, name = '') click to toggle source

Метод добавляет в поле BCC получателя сообщения. Может вызываться несколько раз для добавления нескольких получателей. Особенности обработки. Если в метод передать значения адреса, включающего имя пользователя, то параметр name будет проигнорирован. Name будет взят из переданного адреса. Вторая особенность - при использовании метода отправки :smtp, все BCC-адреса будут удалены.

@param [String] email адрес получателя в формате “user@host.ru” или “Name <user@host.ru>” @param [String] name имя пользователя @return [None] нет @example Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_bcc('user@host.ru', 'Name')              #=> добавлено: "Name" и "user@host.ru"
msg.add_bcc('USerName <user@host.ru>', 'Name')   #=> добавлено: "UserName" и "user@host.ru"
# File lib/cli_application/mail_lib/message.rb, line 161
def add_bcc(email, name = '')
  res = parse_email(email)
  if name == ''
    @bcc[res[:email]] = res[:name]
  else
    @bcc[res[:email]] = name
  end
end
add_cc(email, name = '') click to toggle source

Метод добавляет в поле CC получателя сообщения. Может вызываться несколько раз для добавления нескольких получателей. Особенности обработки. Если в метод передать значения адреса, включающего имя пользователя, то параметр name будет проигнорирован. Name будет взят из переданного адреса. Вторая особенность - при использовании метода отправки :smtp, все CC-адреса будут помещены в TO.

@param [String] email адрес получателя в формате “user@host.ru” или “Name <user@host.ru>” @param [String] name имя пользователя @return [None] нет @example Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_cc('user@host.ru', 'Name')              #=> добавлено: "Name" и "user@host.ru"
msg.add_cc('USerName <user@host.ru>', 'Name')   #=> добавлено: "UserName" и "user@host.ru"
# File lib/cli_application/mail_lib/message.rb, line 140
def add_cc(email, name = '')
  res = parse_email(email)
  if name == ''
    @cc[res[:email]] = res[:name]
  else
    @cc[res[:email]] = name
  end
end
add_to(email, name = '') click to toggle source

Метод добавляет в поле TO получателя сообщения. Может вызываться несколько раз для добавления нескольких получателей. Особенности обработки. Если в метод передать значения адреса, включающего имя пользователя, то параметр name будет проигнорирован. Name будет взят из переданного адреса.

@param [String] email адрес получателя в формате “user@host.ru” или “Name <user@host.ru>” @param [String] name имя пользователя @return [None] нет @example Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_to('user@host.ru', 'Name')              #=> добавлено: "Name" и "user@host.ru"
msg.add_to('USerName <user@host.ru>', 'Name')   #=> добавлено: "UserName" и "user@host.ru"
# File lib/cli_application/mail_lib/message.rb, line 119
def add_to(email, name = '')
  res = parse_email(email)
  if name == ''
    @to[res[:email]] = res[:name]
  else
    @to[res[:email]] = name
  end
end
clear_bcc(warning = false) click to toggle source

Метод очищает все ранее добавленные адреса BCC.

@param [Boolean] warning true для вывода предупреждения об удалении всех адресатов @return [None] нет

# File lib/cli_application/mail_lib/message.rb, line 200
def clear_bcc(warning = false)
  unless @bcc.empty?
    if warning
      warn "Предупреждение: BCC-адреса #{@bcc.inspect} удалены"
    end
    @bcc = Hash.new
  end
end
clear_cc(warning = false) click to toggle source

Метод очищает все ранее добавленные адреса CC.

@param [Boolean] warning true для вывода предупреждения об удалении всех адресатов @return [None] нет

# File lib/cli_application/mail_lib/message.rb, line 187
def clear_cc(warning = false)
  unless @cc.empty?
    if warning
      warn "Предупреждение: CC-адреса #{@cc.inspect} удалены"
    end
    @cc = Hash.new
  end
end
clear_to(warning = false) click to toggle source

Метод очищает все ранее добавленные адреса TO.

@param [Boolean] warning true для вывода предупреждения об удалении всех адресатов @return [None] нет

# File lib/cli_application/mail_lib/message.rb, line 174
def clear_to(warning = false)
  unless @to.empty?
    if warning
      warn "Предупреждение: TO-адреса #{@to.inspect} удалены"
    end
    @to = Hash.new
  end
end
from_email=(val) click to toggle source

Метод добавляет к сообщению указание на адрес и имя отправителя. Принимается формат вида “Name <name@host.ru>”. При этом будет осуществлен корректный разбор строки на имя и адрес

@param [String] val строка с адресом электронной почты @return [None] нет @example Примеры использования

msg = CliApplication::MailLib::Message.new
msg.from_email = "Name <user@host.ru>"
msg.from_email                            #=> "user@host.ru"
msg.from_name                             #=> "Name"

msg.from_email = "user@host.ru"
msg.from_email                            #=> "user@host.ru"
msg.from_name                             #=> ""
# File lib/cli_application/mail_lib/message.rb, line 88
def from_email=(val)
  res = parse_email(val)
  @from_name = res[:name]
  @from_email = res[:email]
end
reply_to=(val) click to toggle source

Метод добавляет к сообщению указание на адрес для ответа. Принимается формат вида “Name <name@host.ru>”. При этом будет осуществлен корректный разбор строки на имя и адрес

@param [String] val строка с адресом электронной почты @return [None] нет @example Примеры использования

msg = CliApplication::MailLib::Message.new
msg.reply_to = "Name <user@host.ru>"
msg.reply_to                                  #=> "user@host.ru"
# File lib/cli_application/mail_lib/message.rb, line 103
def reply_to=(val)
  res = parse_email(val)
  @reply_to = res[:email]
end
to_log() click to toggle source

Метод осуществляет сборку (композицию) сообщения в формате MIME для записи в лог файл без преобразований base64

@return [String] сообщение электронной почты в виде форматированного текста

# File lib/cli_application/mail_lib/message.rb, line 35
def to_log
  message = Array.new
  message << "From: #{build_rfc822_name(@from_email, @from_name, false)}" unless @from_email == ''
  message << build_to_adresses("To", @to, false)
  message << build_to_adresses("Cc", @cc, false)
  message << build_to_adresses("Bcc", @bcc, false)
  message << "Reply-To: #{build_rfc822_name(@reply_to)}" unless @reply_to == ''
  message << "Subject: #{@subject}"
  message << html_to_text(@body.dup, 65, @charset)

  message.compact!
  message.join("\n")
end
to_s() click to toggle source

Метод осуществляет сборку (композицию) сообщения в формате MIME для отправки в Интернет. Поля TO, CC, BCC, Subject преобразуются в бинарную форму через base64

@return [String] сообщение электронной почты в виде форматированного текста

# File lib/cli_application/mail_lib/message.rb, line 53
def to_s
  message = Array.new
  message << "From: #{build_rfc822_name(@from_email, @from_name)}" unless @from_email == ''
  message << "Return-Path: <#{@from_email}>" # http://maksd.info/blog/vse-posty-iz-starogo-bloga/message-75/
  message << build_to_adresses("To", @to)
  message << build_to_adresses("Cc", @cc)
  message << build_to_adresses("Bcc", @bcc)
  message << "Reply-To: #{build_rfc822_name(@reply_to)}" unless @reply_to == ''
  message << "Subject: #{base64_string_encode(@subject)}"
  message << "Date: #{::Time.zone.now.to_formatted_s(:rfc822) }"
  message << "MIME-Version: 1.0 (Ruby gem cli_application; version #{::CliApplication::VERSION})"
  message << "Message-ID: <#{@message_id + '@' + @from_email.split('@').last}>"
  message += alternative_to_s
  message += body_to_s(html_to_text(@body.dup, 65, @charset), 'text/plain')
  message += body_to_s(@body, 'text/html')
  message += footer_to_s

  message.compact!
  message.join("\n")
end