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.
- 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
|