mailhandler 1.0.40 → 1.0.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Rakefile +2 -0
  4. data/lib/mailhandler.rb +2 -0
  5. data/lib/mailhandler/errors.rb +2 -0
  6. data/lib/mailhandler/receiver.rb +2 -0
  7. data/lib/mailhandler/receiving/base.rb +2 -0
  8. data/lib/mailhandler/receiving/filelist/base.rb +2 -0
  9. data/lib/mailhandler/receiving/filelist/filter/base.rb +2 -0
  10. data/lib/mailhandler/receiving/filelist/filter/email.rb +2 -0
  11. data/lib/mailhandler/receiving/folder.rb +2 -0
  12. data/lib/mailhandler/receiving/imap.rb +4 -1
  13. data/lib/mailhandler/receiving/mail.rb +43 -7
  14. data/lib/mailhandler/receiving/notification/console.rb +2 -0
  15. data/lib/mailhandler/receiving/notification/email.rb +2 -0
  16. data/lib/mailhandler/receiving/notification/email/content.rb +2 -0
  17. data/lib/mailhandler/receiving/notification/email/states.rb +2 -0
  18. data/lib/mailhandler/receiving/observer.rb +2 -0
  19. data/lib/mailhandler/sender.rb +2 -0
  20. data/lib/mailhandler/sending/api.rb +2 -0
  21. data/lib/mailhandler/sending/api_batch.rb +2 -0
  22. data/lib/mailhandler/sending/base.rb +2 -0
  23. data/lib/mailhandler/sending/smtp.rb +2 -0
  24. data/lib/mailhandler/version.rb +3 -1
  25. data/mailhandler.gemspec +2 -0
  26. data/spec/spec_helper.rb +2 -0
  27. data/spec/unit/mailhandler/receiver_spec.rb +3 -1
  28. data/spec/unit/mailhandler/receiving/base_spec.rb +2 -0
  29. data/spec/unit/mailhandler/receiving/folder_spec.rb +3 -1
  30. data/spec/unit/mailhandler/receiving/imap_spec.rb +2 -0
  31. data/spec/unit/mailhandler/receiving/notification/console_spec.rb +2 -0
  32. data/spec/unit/mailhandler/receiving/notification/email/content_spec.rb +4 -2
  33. data/spec/unit/mailhandler/receiving/notification/email_spec.rb +2 -0
  34. data/spec/unit/mailhandler/sender_spec.rb +2 -0
  35. data/spec/unit/mailhandler/sending/sender_api_batch_spec.rb +2 -0
  36. data/spec/unit/mailhandler/sending/sender_api_spec.rb +2 -0
  37. data/spec/unit/mailhandler/sending/sender_smtp_spec.rb +4 -2
  38. data/spec/unit/mailhandler_spec.rb +2 -0
  39. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 056b228a9163d9d2e26aa005ad101f967e2e1cc39bd8fd1b4b9dbafc4c393313
4
- data.tar.gz: 411d6e1d41d53a14e90e4293e0092dfa0bca01511c17ef4138879a2770079aef
3
+ metadata.gz: ec30cb76e980f054f83b42518e4327d3f5fd28a44a166c6bbaba8dcc589de5fb
4
+ data.tar.gz: 7d2c7c8a6ff038fa791e1fb519a22521876074e9b753b7f91582a0f9adf802c8
5
5
  SHA512:
6
- metadata.gz: db5f404afdc20afd7f494f4128ed2992bbcdb1586d6db9ec225682daedf48ff27b98a95588e608b131cc87321877794cfd69d819c2a6087cbede64331670cc9e
7
- data.tar.gz: 4c0d31bcdb4edb78198c85c2ca3d60f6562b0694ec7c79e156c5a4137a32e86af1b0a97cd38212f26e5f7946c8b5f9ad70131c0587b8221a69a79424ff79b805
6
+ metadata.gz: c970a64c370a89d34253fdfd22e16381ae8037008ec0baa57a90c89f0385fe56d3d5dfe9d226a79404a1a328a4af73cc99c2d38644dedf1d8d110927a61484e2
7
+ data.tar.gz: 8c070314f2664729623cf75d268c201d97ba0b41c9ea14fd1cd5991880e46a5b66a34ea9f313e5b73572572f2ee65dcf27c0718a9d1c2eeccc6ce213f63f9c7a
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # A sample Gemfile
2
4
  source 'https://rubygems.org'
3
5
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
  RSpec::Core::RakeTask.new(:default)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'mailhandler/sender'
2
4
  require_relative 'mailhandler/receiver'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MailHandler
2
4
  # base error
3
5
  class Error < StandardError
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'receiving/folder'
2
4
  require_relative 'receiving/imap'
3
5
  require_relative 'receiving/observer'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../errors'
2
4
 
3
5
  module MailHandler
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  # Base filtering class, which is used for reading list of all files based on passed pattern.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../base'
2
4
  require_relative '../../../errors'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mail'
2
4
  require_relative 'base'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mail'
2
4
  require_relative 'base.rb'
3
5
  require_relative '../errors'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mail'
2
4
  require_relative 'base.rb'
3
5
  require_relative '../errors'
@@ -92,6 +94,7 @@ module MailHandler
92
94
  archive
93
95
  by_recipient
94
96
  fast_check
97
+ fetch_type
95
98
  ].freeze
96
99
 
97
100
  RETRY_ON_ERROR_COUNT = 3
@@ -118,7 +121,7 @@ module MailHandler
118
121
  count: search_options[:count],
119
122
  order: :desc,
120
123
  keys: imap_filter_keys(options),
121
- delete_after_find: options[:archive])
124
+ delete_after_find: options[:archive], fetch_type: options[:fetch_type])
122
125
  result.is_a?(Array) ? result : [result]
123
126
 
124
127
  # Silently ignore IMAP search errors, [RETRY_ON_ERROR_COUNT] times
@@ -1,11 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mail
2
4
  # IMAP class patch to better manage connection and search of emails
3
5
  class IMAP
4
6
  attr_accessor :imap_connection
5
7
 
6
- # fetch emails with different flag, to make it work with icloud
7
- FETCH_EMAIL_FLAG = "BODY[]" #"RFC822"
8
-
9
8
  def find_emails(options = {}, &block) # rubocop:disable all
10
9
  options = validate_options(options)
11
10
  options[:read_only] ? imap_connection.examine(options[:mailbox]) : imap_connection.select(options[:mailbox])
@@ -19,8 +18,7 @@ module Mail
19
18
  if block_given?
20
19
  uids.each do |uid|
21
20
  uid = options[:uid].to_i unless options[:uid].nil?
22
- fetchdata = imap_connection.uid_fetch(uid, ['RFC822'])[0]
23
- new_message = Mail.new(fetchdata.attr['RFC822'])
21
+ new_message = retrieve_email_content(uid, options[:fetch_type])
24
22
  new_message.mark_for_delete = true if options[:delete_after_find]
25
23
 
26
24
  if block.arity == 3
@@ -39,8 +37,7 @@ module Mail
39
37
 
40
38
  uids.each do |uid|
41
39
  uid = options[:uid].to_i unless options[:uid].nil?
42
- fetchdata = imap_connection.uid_fetch(uid, [FETCH_EMAIL_FLAG])[0]
43
- emails << Mail.new(fetchdata.attr[FETCH_EMAIL_FLAG])
40
+ emails << retrieve_email_content(uid, options[:fetch_type])
44
41
  imap_connection.uid_store(uid, '+FLAGS', [Net::IMAP::DELETED]) if options[:delete_after_find]
45
42
  break unless options[:uid].nil?
46
43
  end
@@ -66,5 +63,44 @@ module Mail
66
63
  def disconnect
67
64
  imap_connection.disconnect if defined?(imap_connection) && imap_connection && !imap_connection.disconnected?
68
65
  end
66
+
67
+ private
68
+
69
+ # fetch emails with different flag
70
+ # to make it work with icloud
71
+ FETCH_FLAG = {
72
+ body: 'BODY[]',
73
+ rfc: 'RFC822',
74
+ envelope: 'ENVELOPE'
75
+ }.freeze
76
+
77
+ def retrieve_email_content(uid, flag_type = :body)
78
+ case flag_type
79
+ when :body
80
+ retrieve_email_content_by_body(uid)
81
+ when :envelope
82
+ retrieve_email_content_by_envelope(uid)
83
+
84
+ else
85
+ retrieve_email_content_by_body(uid)
86
+ end
87
+ end
88
+
89
+ def retrieve_email_content_by_body(uid)
90
+ fetchdata = retrieve_fetch_type_data(FETCH_FLAG[:body], uid)
91
+ Mail.new(fetchdata)
92
+ end
93
+
94
+ def retrieve_email_content_by_envelope(uid)
95
+ fetchdata = retrieve_fetch_type_data(FETCH_FLAG[:envelope], uid)
96
+ mail = Mail.new
97
+ mail.subject = fetchdata.subject
98
+ mail
99
+ end
100
+
101
+ def retrieve_fetch_type_data(fetch_type, uid)
102
+ fetchdata = imap_connection.uid_fetch(uid, fetch_type)[0]
103
+ fetchdata.attr[fetch_type]
104
+ end
69
105
  end
70
106
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MailHandler
2
4
  module Receiving
3
5
  module Notification
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'email/content'
2
4
  require_relative 'email/states'
3
5
  require_relative '../../errors'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mail'
2
4
 
3
5
  module MailHandler
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../email'
2
4
  require_relative '../../../errors'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MailHandler
2
4
  module Receiving
3
5
  # observer handler
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'sending/smtp'
2
4
  require_relative 'sending/api'
3
5
  require_relative 'sending/api_batch'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mail'
2
4
  require 'postmark'
3
5
  require_relative 'base.rb'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'api.rb'
2
4
  require_relative '../errors'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../errors'
2
4
 
3
5
  module MailHandler
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/imap'
2
4
  require_relative 'base'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MailHandler
2
- VERSION = '1.0.40'.freeze
4
+ VERSION = '1.0.41'.freeze
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'mailhandler/version'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec'
2
4
  require 'mail'
3
5
  require 'postmark'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiver do
@@ -57,7 +59,7 @@ describe MailHandler::Receiver do
57
59
  end
58
60
  end
59
61
 
60
- context '.search' do
62
+ describe '.search' do
61
63
  let(:checker) do
62
64
  checker = instance_double('Checker')
63
65
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::Checker do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::FolderChecker do
@@ -10,7 +12,7 @@ describe MailHandler::Receiving::FolderChecker do
10
12
  context 'search emails' do
11
13
  let(:checker) { described_class.new(data_folder, data_folder) }
12
14
 
13
- context '.find email' do
15
+ describe '.find email' do
14
16
  context 'search options' do
15
17
  it 'by multiple search options' do
16
18
  time = Time.now
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::IMAPChecker do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::Notification::Console do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::Notification::EmailContent do
@@ -7,7 +9,7 @@ describe MailHandler::Receiving::Notification::EmailContent do
7
9
  let(:from) { 'igor@example.com' }
8
10
  let(:options) { { test: 'test' } }
9
11
 
10
- context '.email_received' do
12
+ describe '.email_received' do
11
13
  it 'create email' do
12
14
  expect(notification_email_content.retrieve(:received, options, 60, from, to)).to be_kind_of Mail::Message
13
15
  end
@@ -43,7 +45,7 @@ describe MailHandler::Receiving::Notification::EmailContent do
43
45
  end
44
46
  end
45
47
 
46
- context '.email_delayed' do
48
+ describe '.email_delayed' do
47
49
  it 'sender' do
48
50
  expect(notification_email_content.retrieve(:delayed, options, 60, from, to)[:from].to_s).to eq from
49
51
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Receiving::Notification::Email do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Sender do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Sending::PostmarkBatchAPISender do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Sending::PostmarkAPISender do
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Sending::SMTPSender do
4
6
  subject(:smtp_sender) { described_class }
5
7
 
6
- context '.send' do
8
+ describe '.send' do
7
9
  context 'invalid' do
8
10
  it 'incorrect mail type' do
9
11
  sender = smtp_sender.new
@@ -12,7 +14,7 @@ describe MailHandler::Sending::SMTPSender do
12
14
  end
13
15
  end
14
16
 
15
- context '.new' do
17
+ describe '.new' do
16
18
  context 'smtp timeouts' do
17
19
  it 'open' do
18
20
  sender = smtp_sender.new
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe MailHandler::Handler do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailhandler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.40
4
+ version: 1.0.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Balos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-07 00:00:00.000000000 Z
11
+ date: 2019-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mail