cli_application 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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