cli_application 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,150 @@
1
+ # CliApplication::MailLib::Smtp - класс отправки электронной почты через SMTP
2
+
3
+ module CliApplication
4
+ module MailLib
5
+ class SMTP < ::CliApplication::MailLib::Base
6
+
7
+ def initialize(config, folders) # :nodoc:
8
+ @delivery_method = :smtp
9
+ super(config, folders)
10
+
11
+ check_config
12
+ init_smtp_config
13
+ end
14
+
15
+ # Метод отправляет электроные письма через SMTP
16
+ #
17
+ # @param [String] to электронная почта лица, которому отправляется сообщение, или массив адресов
18
+ # @param [String] name имя клиента, которому отправляется сообщение
19
+ # @param [String] title заголовок письма
20
+ # @param [String] body текст письма
21
+ # @return [Boolean] true, если письмо отправлено
22
+ def simple_send(to, name, title, body)
23
+ return false unless valid?
24
+
25
+ message = CliApplication::MailLib::Message.new
26
+ message.from_email = @config.from
27
+ message.subject = title
28
+ message.body = (@config.footer.nil? || @config.footer == '') ? body : (body+@config.footer)
29
+ processing_to(to, name, message)
30
+
31
+ begin
32
+ send_message(message)
33
+ true
34
+ rescue Errno::ECONNREFUSED
35
+ $stderr.puts "Почтовый сервер #{@smtp_config[:address]}:#{@smtp_config[:port]} не найден"
36
+ false
37
+ rescue Exception => e
38
+ $stderr.puts "Ошибка отправки письма: #{e.message}"
39
+ false
40
+ end
41
+ end
42
+
43
+ # Метод возвращает host-имя почтового сервера
44
+ #
45
+ # @return [String] host-имя почтового сервера
46
+ def address
47
+ @smtp_config[:address]
48
+ end
49
+
50
+ # Почтовый домен, от имени которого высылается почта
51
+ #
52
+ # @return [String] почтовый домен
53
+ def domain
54
+ @smtp_config[:domain]
55
+ end
56
+
57
+ # Метод возвращает IP-порт почтового сервера
58
+ #
59
+ # @return [String] IP-порт почтового сервера
60
+ def port
61
+ @smtp_config[:port]
62
+ end
63
+
64
+ # Метод возвращает тип соединения - TLS или non-TLS
65
+ #
66
+ # @return [Boolean] тип соединения, true - TLS, false - non-TLS
67
+ def tls?
68
+ @smtp_config[:tls]
69
+ end
70
+
71
+ # Метод возвращает признак активного debug-режима
72
+ #
73
+ # @return [String] признак debug-режима
74
+ def smtp_log?
75
+ @smtp_config[:smtp_log]
76
+ end
77
+
78
+ # Метод возвращает тип аутентификации
79
+ #
80
+ # @return [String] тип аутентификации в виде строки ('plain', 'login')
81
+ def authentication
82
+ @smtp_config[:authentication].to_s
83
+ end
84
+
85
+ # Метод возвращает логин пользователя электронной почты
86
+ #
87
+ # @return [String] имя пользователя (логин)
88
+ def user_name
89
+ @smtp_config[:user_name]
90
+ end
91
+
92
+ # Метод возвращает пароль пользователя
93
+ #
94
+ # @return [String] пароль пользователя
95
+ def password
96
+ @smtp_config[:password]
97
+ end
98
+
99
+
100
+ private
101
+
102
+
103
+ def send_message(message) # :nodoc:
104
+ message.clear_bcc(true)
105
+
106
+ smtp = Net::SMTP.new(address, port)
107
+ if tls?
108
+ smtp.enable_tls(OpenSSL::SSL::VERIFY_NONE)
109
+ end
110
+ smtp.set_debug_output $stderr if smtp_log?
111
+ if user_name == ''
112
+ smtp.start(domain) do |mailer|
113
+ mailer.send_message message.to_s, message.from_email, message.to_emails
114
+ end
115
+ else
116
+ smtp.start(domain, user_name, password, authentication) do |mailer|
117
+ mailer.send_message message.to_s, message.from_email, message.to_emails
118
+ end
119
+ end
120
+
121
+ end
122
+
123
+
124
+ def check_config # :nodoc:
125
+ return set_check_config_state(false, "Не найдена секция конфиг-файла cli/mail/smtp") if @config.smtp.nil?
126
+ return set_check_config_state(false, "Не найден параметр конфиг-файла cli/mail/smtp/address") if @config.smtp.address.nil?
127
+ return set_check_config_state(false, "Параметр конфиг-файла cli/mail/smtp/address не должен быть пуст") if @config.smtp.address == ''
128
+ return set_check_config_state(false, "Не найден параметр конфиг-файла cli/mail/smtp/domain") if @config.smtp.domain.nil?
129
+ return set_check_config_state(false, "Параметр конфиг-файла cli/mail/smtp/domain не должен быть пуст") if @config.smtp.domain == ''
130
+ return set_check_config_state(false, "Не найден параметр конфиг-файла cli/mail/smtp/port") if @config.smtp.port.nil?
131
+ return set_check_config_state(false, "Параметр конфиг-файла cli/mail/smtp/port не должен быть пуст") if @config.smtp.port == ''
132
+
133
+ set_check_config_state(true, '')
134
+ end
135
+
136
+ def init_smtp_config # :nodoc:
137
+ @smtp_config = Hash.new
138
+ @smtp_config[:domain] = @config.smtp.domain || ''
139
+ @smtp_config[:address] = @config.smtp.address || ''
140
+ @smtp_config[:port] = @config.smtp.port || ''
141
+ @smtp_config[:tls] = @config.smtp.tls
142
+ @smtp_config[:smtp_log] = @config.smtp.debug
143
+ @smtp_config[:authentication] = (@config.smtp.authentication || '').to_sym
144
+ @smtp_config[:user_name] = @config.smtp.user_name || ''
145
+ @smtp_config[:password] = @config.smtp.password || ''
146
+ end
147
+
148
+ end
149
+ end
150
+ end
@@ -1,3 +1,3 @@
1
1
  module CliApplication
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -1,33 +1,33 @@
1
1
  ---
2
2
  :name: app.rb
3
- :shortdescription: "Пример 2 - Настройки CLI-приложения"
3
+ :shortdescription: "Пример 7 - Отправка почты"
4
4
  :version: '1.0'
5
5
  :releasedate: '2015-05-11'
6
6
  :timezone: Moscow
7
- :last_started_at: '2015-05-30 12:27:25 +0300'
7
+ :last_started_at: '2015-06-10 22:49:55 +0300'
8
8
  :folders:
9
9
  :app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/7"
10
10
  :class: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1"
11
11
  :stat: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1/stat"
12
12
  :avg:
13
- :starts: 87
14
- :executed_at: 0.698304
15
- :executed_at_human: 0.698304 секунд
16
- :memory: 33244
13
+ :starts: 234
14
+ :executed_at: 4.56955
15
+ :executed_at_human: 4.56955 секунд
16
+ :memory: 35388
17
17
  :last:
18
- :started_at: '2015-05-30 12:27:25 +0300'
19
- :executed_at: 21.539793
20
- :executed_at_human: 21.539793 секунд
21
- :memory: 35 кбайт
18
+ :started_at: '2015-06-10 22:49:55 +0300'
19
+ :executed_at: 0.033085
20
+ :executed_at_human: 0.033085 секунд
21
+ :memory: 37 кбайт
22
22
  :exitcode: true
23
23
  :last10:
24
- - 2015-05-30 12:27:25 +0300,true,21.539793,35 кбайт
25
- - 2015-05-30 11:52:07 +0300,true,0.880834,35 кбайт
26
- - 2015-05-30 11:51:13 +0300,true,16.334672,36 кбайт
27
- - 2015-05-30 11:43:31 +0300,true,1.077774,35 кбайт
28
- - 2015-05-30 11:40:30 +0300,#<Net::SMTP::Response:0x007fe89425e1d8>,16.540158,34 кбайт
29
- - 2015-05-30 11:26:21 +0300,255,0.031659,37 кбайт
30
- - 2015-05-30 11:22:50 +0300,255,0.031873,36 кбайт
31
- - 2015-05-30 11:22:36 +0300,255,0.034389,35 кбайт
32
- - 2015-05-30 11:18:59 +0300,255,0.030666,35 кбайт
33
- - 2015-05-30 11:18:33 +0300,255,0.030451,35 кбайт
24
+ - 2015-06-10 22:49:55 +0300,true,0.033085,37 кбайт
25
+ - 2015-06-09 23:56:11 +0300,255,0.033716,37 кбайт
26
+ - 2015-06-09 23:44:51 +0300,true,0.053136,36 кбайт
27
+ - 2015-06-09 23:37:45 +0300,true,0.06403,37 кбайт
28
+ - 2015-06-09 23:35:54 +0300,true,0.050132,37 кбайт
29
+ - 2015-06-09 23:35:40 +0300,true,0.047642,36 кбайт
30
+ - 2015-06-09 23:32:41 +0300,true,0.04385,37 кбайт
31
+ - 2015-06-09 23:31:44 +0300,true,0.060342,37 кбайт
32
+ - 2015-06-09 23:30:06 +0300,true,0.048131,36 кбайт
33
+ - 2015-06-09 23:29:48 +0300,true,0.044662,36 кбайт
@@ -0,0 +1,25 @@
1
+ ---
2
+ :name: rdebug-ide
3
+ :shortdescription: "Пример 7 - Отправка почты"
4
+ :version: '1.0'
5
+ :releasedate: '2015-05-11'
6
+ :timezone: Moscow
7
+ :last_started_at: '2015-06-06 23:59:15 +0300'
8
+ :folders:
9
+ :app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/7"
10
+ :class: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1"
11
+ :stat: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1/stat"
12
+ :avg:
13
+ :starts: 2
14
+ :executed_at: 0.531151
15
+ :executed_at_human: 0.531151 секунд
16
+ :memory: 42238
17
+ :last:
18
+ :started_at: '2015-06-06 23:59:15 +0300'
19
+ :executed_at: 1.062301
20
+ :executed_at_human: 1.062301 секунд
21
+ :memory: 42 кбайт
22
+ :exitcode: true
23
+ :last10:
24
+ - 2015-06-06 23:59:15 +0300,true,1.062301,42 кбайт
25
+ - ",0,0,40 кбайт"
@@ -6,9 +6,34 @@ class TestApp < CliExample
6
6
 
7
7
  def main
8
8
  puts "Почта доступна?: #{mail.valid?.inspect}"
9
- puts "Почтовый сервер: #{mail.host}:#{mail.port}"
10
-
11
- mail.quick_send('stan@test-mail.ru', 'Stan', 'Тестовый заголовок', 'Hellow, world')
9
+ if mail.valid?
10
+ puts "Способ отправки почты: #{mail.delivery_method}"
11
+ case mail.delivery_method
12
+ when :log
13
+ puts "Почта сохраняется в лог-файл: #{mail.log_filename.inspect}"
14
+ when :sendmail
15
+ puts "sendmail расположен в: #{mail.sendmail_location.inspect}"
16
+ when :smtp
17
+ puts "Почтовый сервер: #{mail.address}:#{mail.port}"
18
+ else
19
+ puts "Неизвестная конфигурация (данной ветки не должно быть)"
20
+ end
21
+ else
22
+ puts "Ошибка доступа к почте: #{mail.config_fail_message}"
23
+ end
24
+
25
+
26
+ text = Array.new
27
+ text << "<h1>Привет</h1>"
28
+ text << "<p>Я знаю три фрукта:</p>"
29
+ text << "<ul>"
30
+ text << "<li>яблоко</li>"
31
+ text << "<li>груша</li>"
32
+ text << "<li>апельсин (<strong>любимый фрукт!</strong>)</li>"
33
+ text << "</ul>"
34
+ text << "<hr width='1px'>"
35
+
36
+ mail.simple_send('user@host.ru', 'User Name', 'Тестовый заголовок', text.join("\n"))
12
37
  end
13
38
 
14
39
  end
@@ -17,7 +42,7 @@ app = TestApp.new(ARGV, __dir__)
17
42
 
18
43
  app.version = '1.0'
19
44
  app.releasedate = '2015-05-11'
20
- app.shortdescription = 'Пример 2 - Настройки CLI-приложения'
45
+ app.shortdescription = 'Пример 7 - Отправка почты'
21
46
  app.description = "CliApplication gem демо. #{app.shortdescription}"
22
47
 
23
48
  app.help
@@ -0,0 +1,17 @@
1
+
2
+ --- 10 июня 2015 г. 22:49:55 -------------------
3
+ From: "Admin" <admin@cli-application.ru>
4
+ To: "User Name" <user@host.ru>
5
+ Subject: Тестовый заголовок
6
+ ******
7
+ Привет
8
+ ******
9
+
10
+ Я знаю три фрукта:
11
+
12
+ * яблоко
13
+ * груша
14
+ * апельсин (любимый фрукт!)
15
+
16
+ --------------
17
+ Your gem cli_application
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cli_application
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Zhuravlev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-30 00:00:00.000000000 Z
11
+ date: 2015-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -101,12 +101,19 @@ files:
101
101
  - lib/cli_application/includes.rb
102
102
  - lib/cli_application/json_struct.rb
103
103
  - lib/cli_application/mail.rb
104
+ - lib/cli_application/mail_lib/base.rb
105
+ - lib/cli_application/mail_lib/error.rb
106
+ - lib/cli_application/mail_lib/log.rb
107
+ - lib/cli_application/mail_lib/message.rb
108
+ - lib/cli_application/mail_lib/sendmail.rb
109
+ - lib/cli_application/mail_lib/smtp.rb
104
110
  - lib/cli_application/stat.rb
105
111
  - lib/cli_application/version.rb
106
112
  - test/cli_example.rb
107
113
  - test/examples/1/app.rb
108
114
  - test/examples/1/cli_example.rb
109
115
  - test/examples/1/stat/app.yml
116
+ - test/examples/1/stat/rdebug-ide
110
117
  - test/examples/2/app.rb
111
118
  - test/examples/3/app.rb
112
119
  - test/examples/4/app.rb
@@ -114,6 +121,7 @@ files:
114
121
  - test/examples/6/app.rb
115
122
  - test/examples/6/offer.rb
116
123
  - test/examples/7/app.rb
124
+ - test/examples/7/mail/app-mail-2015-06-10.txt
117
125
  - test/stat/rdebug-ide
118
126
  - test/stat/test_app.yml
119
127
  - test/test_app.rb