mail_processor 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/mail_processor/base.rb +48 -0
- data/lib/mail_processor/mail_dir.rb +16 -18
- data/lib/mail_processor/pop3.rb +18 -9
- data/lib/mail_processor/processor.rb +4 -5
- data/lib/mail_processor.rb +1 -0
- data/spec/mail_processor_spec.rb +7 -6
- metadata +23 -6
data/Rakefile
CHANGED
@@ -10,6 +10,7 @@ begin
|
|
10
10
|
gem.email = "rune@epubify.com"
|
11
11
|
gem.homepage = "http://github.com/wrimle/mail_processor"
|
12
12
|
gem.authors = ["Rune Myrland"]
|
13
|
+
gem.add_dependency "log4r", ">= 1.1.8"
|
13
14
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
16
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'log4r'
|
5
|
+
|
6
|
+
module MailProcessor
|
7
|
+
class UnkownRetrieverError < StandardError; end
|
8
|
+
|
9
|
+
log = Log4r::Logger.new "MailProcessor"
|
10
|
+
log.outputters = Log4r::Outputter.stdout
|
11
|
+
|
12
|
+
class Base
|
13
|
+
begin
|
14
|
+
@log = Log4r::Logger.new "MailProcessor::#{self.to_s}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.log
|
18
|
+
@log
|
19
|
+
end
|
20
|
+
|
21
|
+
def log
|
22
|
+
self.class.log
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
# Symbolizes keys from yaml hashes while merging
|
29
|
+
def merge_to_attributes other
|
30
|
+
h = @attributes
|
31
|
+
other.each do |k, v|
|
32
|
+
h[k.to_sym] = v
|
33
|
+
end
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
class File
|
41
|
+
def self.read_binary filename
|
42
|
+
f = File.new(filename, "rb")
|
43
|
+
content = f.read()
|
44
|
+
f.close()
|
45
|
+
content
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -1,30 +1,28 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
require 'rubygems'
|
4
|
-
require 'log4r'
|
5
3
|
|
6
|
-
include Log4r
|
7
4
|
include MailProcessor
|
8
5
|
|
9
|
-
class File
|
10
|
-
def self.read_binary filename
|
11
|
-
f = File.new(filename, "rb")
|
12
|
-
content = f.read()
|
13
|
-
f.close()
|
14
|
-
content
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
6
|
module MailProcessor
|
19
7
|
|
20
|
-
class MailDir
|
21
|
-
|
22
|
-
@log = Logger.new self.
|
23
|
-
|
8
|
+
class MailDir < Base
|
9
|
+
begin
|
10
|
+
@log = Log4r::Logger.new self.to_s
|
11
|
+
end
|
24
12
|
|
13
|
+
def self.log
|
14
|
+
@log
|
15
|
+
end
|
16
|
+
|
17
|
+
def log
|
18
|
+
self.class.log
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize options = {}, &block
|
25
22
|
@attributes = {
|
26
23
|
:glob => "#{ENV['HOME']}/MailDir/new/*",
|
27
|
-
}
|
24
|
+
}
|
25
|
+
merge_to_attributes(options)
|
28
26
|
instance_eval &block if block_given?
|
29
27
|
end
|
30
28
|
|
@@ -47,7 +45,7 @@ module MailProcessor
|
|
47
45
|
FileUtils::rm(filename)
|
48
46
|
count += 1
|
49
47
|
end
|
50
|
-
|
48
|
+
log.info "Processed #{count} mails"
|
51
49
|
|
52
50
|
count == 0
|
53
51
|
end
|
data/lib/mail_processor/pop3.rb
CHANGED
@@ -1,18 +1,25 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
require 'net/pop'
|
4
|
-
require 'rubygems'
|
5
|
-
require 'log4r'
|
6
4
|
|
7
5
|
include MailProcessor
|
8
6
|
|
9
7
|
module MailProcessor
|
10
8
|
|
11
|
-
class Pop3
|
12
|
-
|
13
|
-
@log = Logger.new self.
|
14
|
-
|
9
|
+
class Pop3 < Base
|
10
|
+
begin
|
11
|
+
@log = Log4r::Logger.new self.to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.log
|
15
|
+
@log
|
16
|
+
end
|
15
17
|
|
18
|
+
def log
|
19
|
+
self.class.log
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize options = {}, &block
|
16
23
|
@attributes = {
|
17
24
|
:address => "pop.gmail.com",
|
18
25
|
:port => 110, # 995,
|
@@ -20,7 +27,9 @@ module MailProcessor
|
|
20
27
|
:password => nil,
|
21
28
|
# Must have ruby 1.9 to use this
|
22
29
|
:use_ssl => false, # true
|
23
|
-
}
|
30
|
+
}
|
31
|
+
merge_to_attributes(options)
|
32
|
+
|
24
33
|
instance_eval &block if block_given?
|
25
34
|
self
|
26
35
|
end
|
@@ -84,13 +93,13 @@ module MailProcessor
|
|
84
93
|
pop = Net::POP3.new(a[:address], a[:port])
|
85
94
|
pop.start(a[:username], a[:password])
|
86
95
|
if pop.mails.empty?
|
87
|
-
|
96
|
+
log.info 'No mail.'
|
88
97
|
else
|
89
98
|
pop.each_mail do |m|
|
90
99
|
yield m.pop
|
91
100
|
m.delete
|
92
101
|
end
|
93
|
-
|
102
|
+
log.info "Processed #{pop.mails.size} mails."
|
94
103
|
pop.finish
|
95
104
|
didWork = true
|
96
105
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
4
|
-
class UnkownRetrieverError < StandardError; end
|
5
|
-
|
3
|
+
include MailProcessor
|
6
4
|
|
7
|
-
|
5
|
+
module MailProcessor
|
6
|
+
class Processor < Base
|
8
7
|
def initialize options = {}, &block
|
9
8
|
@attributes = {
|
10
9
|
:retriever => nil
|
@@ -19,7 +18,7 @@ module MailProcessor
|
|
19
18
|
when :pop3 then
|
20
19
|
Pop3.new options, &block
|
21
20
|
when :mail_dir then
|
22
|
-
|
21
|
+
MailDir.new options, &block
|
23
22
|
else
|
24
23
|
raise UnkownRetrieverError, "Retriever type #{method.to_s} not known"
|
25
24
|
end
|
data/lib/mail_processor.rb
CHANGED
data/spec/mail_processor_spec.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
+
require 'yaml'
|
4
|
+
|
3
5
|
describe "MailProcessor" do
|
4
6
|
|
5
7
|
context "Pop3" do
|
6
8
|
it "works" do
|
7
|
-
|
9
|
+
unless(File.exists?("spec/pop3.yaml"))
|
10
|
+
pending("needs a real mail account")
|
11
|
+
end
|
8
12
|
|
13
|
+
config = YAML.load_file("spec/pop3.yaml")
|
9
14
|
processor = Processor.new do
|
10
|
-
retriever :pop3
|
11
|
-
address "pop.example.com"
|
12
|
-
username "test@example.com"
|
13
|
-
password "**SECRET**"
|
14
|
-
end
|
15
|
+
retriever :pop3, config["pop3"]
|
15
16
|
end
|
16
17
|
|
17
18
|
processor.process do |popped|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_processor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rune Myrland
|
@@ -15,13 +15,29 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-20 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: log4r
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 1
|
33
|
+
- 8
|
34
|
+
version: 1.1.8
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
25
41
|
none: false
|
26
42
|
requirements:
|
27
43
|
- - ">="
|
@@ -33,7 +49,7 @@ dependencies:
|
|
33
49
|
- 9
|
34
50
|
version: 1.2.9
|
35
51
|
type: :development
|
36
|
-
version_requirements: *
|
52
|
+
version_requirements: *id002
|
37
53
|
description: Pop3 and MailDir is supported at the moment.
|
38
54
|
email: rune@epubify.com
|
39
55
|
executables: []
|
@@ -51,6 +67,7 @@ files:
|
|
51
67
|
- Rakefile
|
52
68
|
- VERSION
|
53
69
|
- lib/mail_processor.rb
|
70
|
+
- lib/mail_processor/base.rb
|
54
71
|
- lib/mail_processor/mail_dir.rb
|
55
72
|
- lib/mail_processor/pop3.rb
|
56
73
|
- lib/mail_processor/processor.rb
|