simple_mailing_list 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 17c2c77915c5e0a76917d09694ae169b748a8452
4
- data.tar.gz: 23f0b3d46cf1177824ba537adfab98d0b5adac95
3
+ metadata.gz: 4d8f533e87e480112035f53b5d344db916d0321a
4
+ data.tar.gz: 97dbe991ad2ce2ec4658d17f648b9784857d1554
5
5
  SHA512:
6
- metadata.gz: 2c5662a1f771e384b6aafa869866c8b87b31c0ec08a5eabc7ec17bd72c5eabd1b3588a14f9823b6df1d5575693d6513ea1ed43b2929507a51ee8588c4227e68d
7
- data.tar.gz: 68f7d6c4dfd8e750f1d68224a30821ad40060ef118c8339c7fe7fc55b67b1a916deb9b778f35b95f25301e8e95eba3ba414ded584f84fd4a492ccf95203c1593
6
+ metadata.gz: 89dc8c260cceee29e6b83f697e8c7f9b2b1ba392ba3a0570c9795442a99cb25b0092b2462294d02f69dedde9d6f4e6e000a7cfe979293b31070c5e4e4dbdf3a2
7
+ data.tar.gz: 1bfed8edcbaea036b2ce9dfe438738d9c90d95af95d6b67957d397ec397abc946ed0193329b6390ed715c05e0595d383c137c76f3c40d5a840d8d104e82c2a3f
@@ -125,3 +125,22 @@ forward:
125
125
  # forward@mail.example.com に送ると登録者全員に、
126
126
  # forward(数値)@mail.example.com に送ると
127
127
  # 該当学年の登録者のみにメールを転送する。
128
+
129
+ # メール転送に失敗/成功した際に送る報告メール。
130
+ # 省略した場合は、報告メールを送らない。
131
+ forward_fail_subject: メール配信の認証に失敗しました
132
+ forward_fail_body: |
133
+ 「{{subject}}」
134
+ のメール配信認証に失敗しました。
135
+ 次のような原因が考えられます:
136
+ ・配信が許可されていないメールアドレスから配信しようとした。
137
+ ・認証コードが必要な設定にもかかわらず認証コードが入力されていない。
138
+ ・危険性のあるファイルを添付している。
139
+ forward_success_subject: メール配信が完了しました
140
+ forward_success_body: |
141
+ 「{{subject}}」
142
+ のメール配信が終了しました。
143
+ 全部で{{count}}通のメールが配信されました。
144
+
145
+ # 転送メールの「reply_to」欄に設定するメールアドレス。
146
+ reply_to_address: noreply_smltest@mail.nodai-2-h.ed.jp
@@ -87,3 +87,15 @@ forward:
87
87
  options: { grade: 2 }
88
88
  - address: forward3@mail.example.com
89
89
  options: { grade: 3 }
90
+
91
+ forward_fail_subject: "Mail forwarding Error!"
92
+ forward_fail_body: |
93
+ failed forwarding mail
94
+ "{{subject}}"
95
+ forward_success_subject: "Mail forwarding successed."
96
+ forward_success_body: |
97
+ successed forwarding mail
98
+ "{{subject}}"
99
+ {{count}} mails have been sent.
100
+
101
+ reply_to_address: noreply_smltest@mail.nodai-2-h.ed.jp
@@ -56,6 +56,10 @@ module SimpleMailingList
56
56
  @delete_success_body = config["delete_success_body"] || ""
57
57
 
58
58
  @forward = config["forward"] || []
59
+ @forward_fail_subject = config["forward_fail_subject"]
60
+ @forward_fail_body = config["forward_fail_body"]
61
+ @forward_success_subject = config["forward_success_subject"]
62
+ @forward_success_body = config["forward_success_body"]
59
63
  @reply_to_address = config["reply_to_address"]
60
64
 
61
65
  # database
@@ -62,7 +62,7 @@ module SimpleMailingList
62
62
  mode: "register",
63
63
  options: JSON.generate(regisiter_options)
64
64
  ).save!
65
-
65
+
66
66
  mail = create_mail(
67
67
  to: address,
68
68
  subject: @register_confirm_subject,
@@ -90,7 +90,7 @@ module SimpleMailingList
90
90
  mode: "delete",
91
91
  options: "{}"
92
92
  ).save!
93
-
93
+
94
94
  mail = create_mail(
95
95
  to: address,
96
96
  subject: @delete_confirm_subject,
@@ -110,11 +110,11 @@ module SimpleMailingList
110
110
  subject = mail.subject.to_s
111
111
  body = mail.body ? mail.body.decoded : ""
112
112
  body += mail.text_part.decoded.to_s if mail.text_part
113
-
113
+
114
114
  Confirmation.where(mail_address: address).each do |confirmation|
115
115
  check_code = confirmation.check_code
116
116
  next unless subject.index(check_code) || body.index(check_code)
117
-
117
+
118
118
  confirm_options = {}
119
119
  subject_text, body_text = case confirmation.mode
120
120
  when "register"
@@ -129,7 +129,7 @@ module SimpleMailingList
129
129
  else
130
130
  next
131
131
  end
132
-
132
+
133
133
  create_mail(
134
134
  to: address,
135
135
  subject: subject_text,
@@ -143,7 +143,7 @@ module SimpleMailingList
143
143
  confirmation.destroy
144
144
  return true
145
145
  end
146
-
146
+
147
147
  return false
148
148
  end
149
149
 
@@ -178,12 +178,14 @@ module SimpleMailingList
178
178
  if @permitted_users
179
179
  permitted_user = @permitted_users.find do |user|
180
180
  (!user["address"] || user["address"] == address) &&
181
- (!user["check_code"] || subject.index(["check_code"]))
181
+ (!user["check_code"] || subject.encode("utf-8").index(user["check_code"]))
182
+ end
183
+ return forward_mail_failed(mail, filename) unless permitted_user
184
+ if permitted_user["check_code"]
185
+ subject = subject.encode("utf-8").sub(permitted_user["check_code"], "")
182
186
  end
183
- return true unless permitted_user
184
- subject.sub!(permitted_user["check_code"], "") if permitted_user["check_code"]
185
187
  elsif @registered_user_only
186
- return true unless User.find_by(mail_address: address)
188
+ return forward_mail_failed(mail, filename) unless User.find_by(mail_address: address)
187
189
  end
188
190
  danger_ext = /\.(exe|com|bat|cmd|vbs|vbe|js|jse|wsf|wsh|msc|jar|hta|scr|cpl|lnk)$/i
189
191
  if mail.has_attachments?
@@ -192,20 +194,21 @@ module SimpleMailingList
192
194
  end
193
195
  if attachment
194
196
  @log.warn("Contains danger attachment![#{attachment}@#{File.basename(filename)}]")
195
- return true
197
+ return forward_mail_failed(mail, filename)
196
198
  end
197
199
  end
198
-
200
+
199
201
  sendmail = create_forward_mail(mail, subject)
200
-
202
+
201
203
  users = User.where(enabled: 1).to_a.select do |user|
202
204
  user_options = JSON.parse(user.options)
203
205
  !forward_options.keys.any?{ |key| forward_options[key] != user_options[key] }
204
206
  end
205
207
  users.map! { |user| user.mail_address }
208
+ users.unshift(address)
206
209
  users.uniq!
207
- users.delete(address)
208
-
210
+
211
+ @log.info "Sending start."
209
212
  domains = { "???" => [] }
210
213
  users.each do |user|
211
214
  domain = user.match(/@([^@]+)$/) ? $1 : "???"
@@ -213,8 +216,7 @@ module SimpleMailingList
213
216
  domains[domain].push(user)
214
217
  end
215
218
  max = domains.values.map(&:size).max
216
- domains["???"][max] = address
217
- 0.upto(max) do |i|
219
+ max.times do |i|
218
220
  time = Time.now
219
221
  domains.each_value do |address_array|
220
222
  mail_address = address_array[i]
@@ -237,7 +239,36 @@ module SimpleMailingList
237
239
  next if Time.now - time > @sleep_time2 || i+1 == max
238
240
  sleep time - Time.now + @sleep_time2
239
241
  end
240
- @log.info "Forward mails to #{users.size + 1} user#{users.size > 0 ? 's' : ''}."
242
+
243
+ @log.info "Forward mails to #{users.size} user#{users.size > 0 ? 's' : ''}."
244
+ if @forward_success_subject && @forward_success_body
245
+ options = {
246
+ "subject" => subject.encode("utf-8"),
247
+ "count" => users.size
248
+ }
249
+ reportmail = create_mail(
250
+ to: address,
251
+ subject: @forward_success_subject,
252
+ body: @forward_success_body,
253
+ options: options
254
+ ).deliver
255
+ end
256
+ move_mail_file(filename, "forward")
257
+ return true
258
+ end
259
+
260
+ def forward_mail_failed(mail, filename)
261
+ return true unless @forward_fail_subject && @forward_fail_body
262
+
263
+ options = {
264
+ "subject" => mail.subject.to_s.encode("utf-8")
265
+ }
266
+ sendmail = create_mail(
267
+ to: Array(mail.from).first.to_s,
268
+ subject: @forward_fail_subject,
269
+ body: @forward_fail_body,
270
+ options: options
271
+ ).deliver
241
272
  move_mail_file(filename, "forward")
242
273
  return true
243
274
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleMailingList
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_mailing_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nodai2hITC
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-06 00:00:00.000000000 Z
11
+ date: 2018-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler