Class: CliApplication::MailLib::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/cli_application/mail_lib/message.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeNone

Конструктор инициализирует сообщение электронной почты и компоненты сообщения



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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

Instance Attribute Details

#bodyObject

Returns the value of attribute body.



11
12
13
# File 'lib/cli_application/mail_lib/message.rb', line 11

def body
  @body
end

#charsetObject

Returns the value of attribute charset.



10
11
12
# File 'lib/cli_application/mail_lib/message.rb', line 10

def charset
  @charset
end

#from_emailObject

Returns the value of attribute from_email.



6
7
8
# File 'lib/cli_application/mail_lib/message.rb', line 6

def from_email
  @from_email
end

#from_nameObject

Returns the value of attribute from_name.



7
8
9
# File 'lib/cli_application/mail_lib/message.rb', line 7

def from_name
  @from_name
end

#reply_toObject

Returns the value of attribute reply_to.



8
9
10
# File 'lib/cli_application/mail_lib/message.rb', line 8

def reply_to
  @reply_to
end

#subjectObject

Returns the value of attribute subject.



9
10
11
# File 'lib/cli_application/mail_lib/message.rb', line 9

def subject
  @subject
end

Instance Method Details

#add_bcc(email, name = '') ⇒ None

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

Examples:

Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_bcc('[email protected]', 'Name')              #=> добавлено: "Name" и "[email protected]"
msg.add_bcc('USerName <[email protected]>', 'Name')   #=> добавлено: "UserName" и "[email protected]"

Parameters:

Returns:

  • (None)

    нет



161
162
163
164
165
166
167
168
# 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 = '') ⇒ None

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

Examples:

Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_cc('[email protected]', 'Name')              #=> добавлено: "Name" и "[email protected]"
msg.add_cc('USerName <[email protected]>', 'Name')   #=> добавлено: "UserName" и "[email protected]"

Parameters:

Returns:

  • (None)

    нет



140
141
142
143
144
145
146
147
# 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 = '') ⇒ None

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

Examples:

Примеры использования

msg = CliApplication::MailLib::Message.new
msg.add_to('[email protected]', 'Name')              #=> добавлено: "Name" и "[email protected]"
msg.add_to('USerName <[email protected]>', 'Name')   #=> добавлено: "UserName" и "[email protected]"

Parameters:

Returns:

  • (None)

    нет



119
120
121
122
123
124
125
126
# 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) ⇒ None

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

Parameters:

  • warning (Boolean) (defaults to: false)

    true для вывода предупреждения об удалении всех адресатов

Returns:

  • (None)

    нет



200
201
202
203
204
205
206
207
# 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) ⇒ None

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

Parameters:

  • warning (Boolean) (defaults to: false)

    true для вывода предупреждения об удалении всех адресатов

Returns:

  • (None)

    нет



187
188
189
190
191
192
193
194
# 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) ⇒ None

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

Parameters:

  • warning (Boolean) (defaults to: false)

    true для вывода предупреждения об удалении всех адресатов

Returns:

  • (None)

    нет



174
175
176
177
178
179
180
181
# 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

#to_logString

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

Returns:

  • (String)

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



35
36
37
38
39
40
41
42
43
44
45
46
47
# 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_sString

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

Returns:

  • (String)

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



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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