mailhandler 1.0.40 → 1.0.41

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