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.
- checksums.yaml +4 -4
- data/README.md +2 -49
- data/lib/cli_application.rb +10 -0
- data/lib/cli_application/app.rb +7 -1
- data/lib/cli_application/argv.rb +2 -0
- data/lib/cli_application/mail.rb +34 -61
- data/lib/cli_application/mail_lib/base.rb +142 -0
- data/lib/cli_application/mail_lib/error.rb +45 -0
- data/lib/cli_application/mail_lib/log.rb +90 -0
- data/lib/cli_application/mail_lib/message.rb +402 -0
- data/lib/cli_application/mail_lib/sendmail.rb +89 -0
- data/lib/cli_application/mail_lib/smtp.rb +150 -0
- data/lib/cli_application/version.rb +1 -1
- data/test/examples/1/stat/app.yml +20 -20
- data/test/examples/1/stat/rdebug-ide +25 -0
- data/test/examples/7/app.rb +29 -4
- data/test/examples/7/mail/app-mail-2015-06-10.txt +17 -0
- metadata +10 -2
@@ -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,33 +1,33 @@
|
|
1
1
|
---
|
2
2
|
:name: app.rb
|
3
|
-
:shortdescription: "Пример
|
3
|
+
:shortdescription: "Пример 7 - Отправка почты"
|
4
4
|
:version: '1.0'
|
5
5
|
:releasedate: '2015-05-11'
|
6
6
|
:timezone: Moscow
|
7
|
-
:last_started_at: '2015-
|
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:
|
14
|
-
:executed_at:
|
15
|
-
:executed_at_human:
|
16
|
-
:memory:
|
13
|
+
:starts: 234
|
14
|
+
:executed_at: 4.56955
|
15
|
+
:executed_at_human: 4.56955 секунд
|
16
|
+
:memory: 35388
|
17
17
|
:last:
|
18
|
-
:started_at: '2015-
|
19
|
-
:executed_at:
|
20
|
-
:executed_at_human:
|
21
|
-
:memory:
|
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-
|
25
|
-
- 2015-
|
26
|
-
- 2015-
|
27
|
-
- 2015-
|
28
|
-
- 2015-
|
29
|
-
- 2015-
|
30
|
-
- 2015-
|
31
|
-
- 2015-
|
32
|
-
- 2015-
|
33
|
-
- 2015-
|
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 кбайт"
|
data/test/examples/7/app.rb
CHANGED
@@ -6,9 +6,34 @@ class TestApp < CliExample
|
|
6
6
|
|
7
7
|
def main
|
8
8
|
puts "Почта доступна?: #{mail.valid?.inspect}"
|
9
|
-
|
10
|
-
|
11
|
-
|
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 = 'Пример
|
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
|
+
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-
|
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
|