mailtrap 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/README.txt +15 -11
- data/Rakefile +1 -1
- data/bin/mailtrap +2 -2
- data/lib/mailtrap.rb +31 -26
- metadata +2 -2
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/README.txt
CHANGED
@@ -4,23 +4,27 @@ mailtrap
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
Mailtrap is a mock SMTP server for use in Rails development.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
for the server and also where the messages get written (default: /tmp). Messages
|
14
|
-
will get written to files named smtp0001.msg, smtp0002.msg, and so on.
|
7
|
+
Mailtrap is a mock SMTP server for use in Rails development.
|
8
|
+
|
9
|
+
Mailtrap waits on your choosen port for a client to connect and talks _just enough_ SMTP protocol for ActionMailer to successfully deliver its message.
|
10
|
+
|
11
|
+
Mailtrap makes *no* attempt to actually deliver messages and, instead, writes them into sequentially numbered files on disk (hence the name Mail_trap_).
|
12
|
+
|
13
|
+
You can configure the hostname (default: localhost) and port (default: 2525) for the server and also where the messages get written (default: /var/tmp). Messages will get written to files named smtp0001.msg, smtp0002.msg, and so on.
|
15
14
|
|
16
15
|
== FEATURES/PROBLEMS:
|
17
16
|
|
18
|
-
*
|
19
|
-
*
|
17
|
+
* Lightweight, no setup
|
18
|
+
* Runs as a daemon with start, stop, etc..
|
19
|
+
* Tested with ActionMailer's SMTP delivery method
|
20
|
+
* Very, very, dumb ... might not work with an arbitrary SMTP client
|
20
21
|
|
21
22
|
== SYNOPSIS:
|
22
23
|
|
23
|
-
mailtrap --
|
24
|
+
* mailtrap --help (to see Daemonization options)
|
25
|
+
* mailtrap start --help (to see Mailtrap options)
|
26
|
+
|
27
|
+
* mailtrap start --host localhost --port 8025 --once --msgdir=/var/tmp
|
24
28
|
|
25
29
|
== REQUIREMENTS:
|
26
30
|
|
data/Rakefile
CHANGED
data/bin/mailtrap
CHANGED
@@ -11,7 +11,7 @@ opts = Trollop::options do
|
|
11
11
|
opt :host, "The host SMTP clients will connect to", :default => 'localhost'
|
12
12
|
opt :port, "The port SMTP clients will connect to", :default => 2525
|
13
13
|
opt :once, "Whether to terminate after serving the first client", :default => false
|
14
|
-
opt :
|
14
|
+
opt :file, "File where messages get written", :default => "/var/tmp/mailtrap.log"
|
15
15
|
end
|
16
16
|
|
17
17
|
options = {
|
@@ -24,5 +24,5 @@ options = {
|
|
24
24
|
}
|
25
25
|
|
26
26
|
Daemons.run_proc( 'mailtrap', options ) do
|
27
|
-
Mailtrap.new( opts[:host], opts[:port], opts[:once], opts[:
|
27
|
+
Mailtrap.new( opts[:host], opts[:port], opts[:once], opts[:file] )
|
28
28
|
end
|
data/lib/mailtrap.rb
CHANGED
@@ -4,20 +4,29 @@ require 'daemons'
|
|
4
4
|
require 'socket'
|
5
5
|
require 'trollop'
|
6
6
|
|
7
|
+
#
|
8
|
+
# Mailtrap creates a TCP server that listens on a specified port for SMTP
|
9
|
+
# clients. Accepts the connection and talks just enough of the SMTP protocol
|
10
|
+
# for them to deliver a message which it writes to disk.
|
11
|
+
#
|
7
12
|
class Mailtrap
|
8
|
-
VERSION = '0.
|
13
|
+
VERSION = '0.2.0'
|
9
14
|
|
10
|
-
|
15
|
+
# Create a new Mailtrap on the specified host:port. If once it true it
|
16
|
+
# will listen for one message then exit. Specify the msgdir where messages
|
17
|
+
# are written.
|
18
|
+
def initialize( host, port, once, msgfile )
|
11
19
|
@host = host
|
12
20
|
@port = port
|
13
21
|
@once = once
|
14
|
-
@
|
22
|
+
@msgfile = msgfile
|
15
23
|
|
16
|
-
puts "Mailtrap starting at #{@host}:#{port} and writing to #{@
|
24
|
+
puts "Mailtrap starting at #{@host}:#{port} and writing to #{@msgfile}"
|
17
25
|
service = TCPServer.new( @host, @port )
|
18
26
|
accept( service )
|
19
27
|
end
|
20
28
|
|
29
|
+
# Service one or more SMTP client connections
|
21
30
|
def accept( service )
|
22
31
|
while session = service.accept
|
23
32
|
|
@@ -39,30 +48,28 @@ class Mailtrap
|
|
39
48
|
end
|
40
49
|
end
|
41
50
|
|
51
|
+
# Write a plain text dump of the incoming email to a text
|
52
|
+
# file. The file will be in the @msgdir folder and will
|
53
|
+
# be called smtp0001.msg, smtp0002.msg, and so on.
|
42
54
|
def write( from, to_list, message )
|
43
55
|
|
56
|
+
# Strip SMTP commands from To: and From:
|
44
57
|
from.gsub!( /MAIL FROM:\s*/, "" )
|
45
58
|
to_list = to_list.map { |to| to.gsub( /RCPT TO:\s*/, "" ) }
|
46
59
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
File.open( File.join( @msgdir, "smtp%04d.msg" % n ), "w" ) do |file|
|
56
|
-
file.puts "FROM: #{from}"
|
57
|
-
to_list.each do |to|
|
58
|
-
file.puts "TO: #{to}"
|
59
|
-
end
|
60
|
-
file.puts "----"
|
60
|
+
# Append to the end of the messages file
|
61
|
+
File.open( @msgfile, "a" ) do |file|
|
62
|
+
file.puts "****************************************"
|
63
|
+
file.puts "From: #{from}"
|
64
|
+
file.puts "To: #{to_list.join(", ")}"
|
65
|
+
file.puts "Body:"
|
61
66
|
file.puts message
|
62
67
|
end
|
63
68
|
|
64
69
|
end
|
65
70
|
|
71
|
+
# Talk pidgeon-SMTP to the client to get them to hand over the message
|
72
|
+
# and go away.
|
66
73
|
def serve( connection )
|
67
74
|
connection.puts( "220 #{@host} MailTrap ready ESTMP" )
|
68
75
|
helo = connection.get_line # whoever they are
|
@@ -74,12 +81,14 @@ class Mailtrap
|
|
74
81
|
connection.puts "250 HELP"
|
75
82
|
end
|
76
83
|
|
84
|
+
# Accept MAIL FROM:
|
77
85
|
from = connection.get_line
|
78
86
|
connection.puts( "250 OK" )
|
79
87
|
puts "From: #{from}"
|
80
88
|
|
81
89
|
to_list = []
|
82
90
|
|
91
|
+
# Accept RCPT TO: until we see DATA
|
83
92
|
loop do
|
84
93
|
to = connection.get_line
|
85
94
|
break if to.nil?
|
@@ -94,26 +103,22 @@ class Mailtrap
|
|
94
103
|
end
|
95
104
|
end
|
96
105
|
|
97
|
-
|
98
|
-
|
106
|
+
# Capture the message body terminated by <CR>.<CR>
|
99
107
|
lines = []
|
100
|
-
|
101
108
|
loop do
|
102
109
|
line = connection.get_line
|
103
110
|
break if line.nil? || line == "."
|
104
111
|
lines << line
|
105
112
|
puts "+ #{line}"
|
106
113
|
end
|
107
|
-
|
108
|
-
|
114
|
+
|
115
|
+
# We expect the client will go away now
|
109
116
|
connection.puts( "250 OK" )
|
110
|
-
|
111
117
|
connection.gets # Quit
|
112
118
|
connection.puts "221 Seeya"
|
113
|
-
|
114
119
|
connection.close
|
115
120
|
puts "And we're done with that bozo!"
|
116
|
-
|
121
|
+
|
117
122
|
write( from, to_list, lines.join( "\n" ) )
|
118
123
|
|
119
124
|
end
|
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: mailtrap
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
6
|
+
version: 0.2.0
|
7
7
|
date: 2007-10-04 00:00:00 +01:00
|
8
8
|
summary: Mailtrap is a mock SMTP server for use in Rails development
|
9
9
|
require_paths:
|
@@ -11,7 +11,7 @@ require_paths:
|
|
11
11
|
email: self@mattmower.com
|
12
12
|
homepage: " by Matt Mower <self@mattmower.com>"
|
13
13
|
rubyforge_project: rubymatt
|
14
|
-
description: "Mailtrap is a mock SMTP server for use in Rails development.
|
14
|
+
description: "Mailtrap is a mock SMTP server for use in Rails development. Mailtrap waits on your choosen port for a client to connect and talks _just enough_ SMTP protocol for ActionMailer to successfully deliver its message. Mailtrap makes *no* attempt to actually deliver messages and, instead, writes them into sequentially numbered files on disk (hence the name \tMail_trap_). You can configure the hostname (default: localhost) and port (default: 2525) for the server and also where the messages get written (default: /var/tmp). Messages will get written to files named smtp0001.msg, smtp0002.msg, and so on. == FEATURES/PROBLEMS:"
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
metadata.gz.sig
CHANGED
Binary file
|