mailcatcher-jruby 1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -12
- data/bin/catchmail +3 -2
- data/bin/mailcatcher +0 -0
- data/bin/mailweb +8 -0
- data/lib/mail_catcher/version.rb +1 -1
- data/lib/mail_catcher/web.rb +0 -24
- data/public/javascripts/application.js +21 -14
- data/public/stylesheets/application.css +16 -26
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee3b2fdd291a0f4ef4bf0a7d223577cab7f90f2d
|
4
|
+
data.tar.gz: 22679dba081b3b6b08b7d03633634514067edc3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a59ff3bc7c83df67c3c4b74545fb0724ecdcf4f1e2701ea48337b5e15582e2aa8e5989a0a7761b0b782e1e4639cb2ba5c21ffc66bd9c1ec7baf9b6581d0b895a
|
7
|
+
data.tar.gz: 56340005b69b5893f443c550fe064873ad55c97625dc1bba6b1f9a93f5ac114053696cd4a2afbc35f9d336ec9376571315c238bf67673641ceeb1cd4cc3c46a6
|
data/README.md
CHANGED
@@ -1,22 +1,32 @@
|
|
1
|
-
# MailCatcher
|
1
|
+
# MailCatcher for JRuby
|
2
2
|
|
3
|
-
## JRuby
|
4
|
-
1. Configure rails.
|
5
|
-
To set up your rails app, I recommend adding this to your `environment/development.rb`:
|
3
|
+
## Usage for JRuby on Rails.
|
6
4
|
|
7
|
-
|
8
|
-
config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
|
5
|
+
1. `gem install mailcatcher-jruby`
|
9
6
|
|
10
|
-
2. Start the smpt server at port
|
11
|
-
`
|
7
|
+
2. Start the smpt server at port 9000
|
8
|
+
`mailcatcher`
|
12
9
|
|
13
|
-
|
14
|
-
|
10
|
+
use `--smtp-port 1080` to change the port to 1080
|
11
|
+
|
12
|
+
3. Start Puma rack server to host web pages of emails at port 9090.
|
13
|
+
`mailweb`
|
15
14
|
add `-p 1080` to use port 1080
|
16
15
|
|
17
|
-
Open [http://127.0.0.1:
|
16
|
+
Open [http://127.0.0.1:9090](http://127.0.0.1:9090) to see emails.
|
17
|
+
|
18
18
|
|
19
|
-
|
19
|
+
4. Configure rails.
|
20
|
+
To set up your rails app, I recommend adding this to your `environment/development.rb`:
|
21
|
+
|
22
|
+
config.action_mailer.delivery_method = :smtp
|
23
|
+
config.action_mailer.smtp_settings = { :address => "127.0.0.1", :port =>
|
24
|
+
9000 }
|
25
|
+
|
26
|
+
|
27
|
+
# Original Documentation
|
28
|
+
|
29
|
+
# MailCatcher
|
20
30
|
|
21
31
|
|
22
32
|
Catches mail and serves it through a dream.
|
data/bin/catchmail
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
|
10
10
|
require 'optparse'
|
11
11
|
|
12
|
-
options = {:smtp_ip => '127.0.0.1', :smtp_port =>
|
12
|
+
options = {:smtp_ip => '127.0.0.1', :smtp_port => 9000}
|
13
13
|
|
14
14
|
OptionParser.new do |parser|
|
15
15
|
parser.banner = <<-BANNER.gsub /^ +/, ""
|
@@ -32,7 +32,7 @@ OptionParser.new do |parser|
|
|
32
32
|
parser.on('-f FROM', 'Set the sending address') do |from|
|
33
33
|
options[:from] = from
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
parser.on('-oi', 'Ignored option -oi') do |ignored|
|
37
37
|
end
|
38
38
|
parser.on('-t', 'Ignored option -t') do |ignored|
|
@@ -58,4 +58,5 @@ end
|
|
58
58
|
|
59
59
|
message = Mail.new ARGF.read
|
60
60
|
message.return_path = options[:from] if options[:from]
|
61
|
+
puts 'Got email input, sending...'
|
61
62
|
message.deliver
|
data/bin/mailcatcher
CHANGED
File without changes
|
data/bin/mailweb
ADDED
data/lib/mail_catcher/version.rb
CHANGED
data/lib/mail_catcher/web.rb
CHANGED
@@ -5,30 +5,6 @@ require 'uri'
|
|
5
5
|
#require 'skinny'
|
6
6
|
|
7
7
|
|
8
|
-
# #-=--------------------
|
9
|
-
# module MailCatcher
|
10
|
-
# end
|
11
|
-
|
12
|
-
# DB_CONF = { adapter: 'jdbcsqlite3', database: 'db' }
|
13
|
-
|
14
|
-
# class Message < ActiveRecord::Base
|
15
|
-
# establish_connection DB_CONF
|
16
|
-
# has_many :message_parts, dependent: :destroy
|
17
|
-
# self.inheritance_column = nil
|
18
|
-
|
19
|
-
# def recipients
|
20
|
-
# self[:recipients] &&= ActiveSupport::JSON.decode self[:recipients]
|
21
|
-
# end
|
22
|
-
# end
|
23
|
-
# class MessagePart < ActiveRecord::Base
|
24
|
-
# establish_connection DB_CONF
|
25
|
-
# belongs_to :message
|
26
|
-
# self.inheritance_column = nil
|
27
|
-
# end
|
28
|
-
|
29
|
-
# #---------------------------
|
30
|
-
|
31
|
-
|
32
8
|
class Sinatra::Request
|
33
9
|
#include Skinny::Helpers
|
34
10
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
(function() {
|
2
2
|
var MailCatcher,
|
3
|
-
|
3
|
+
_this = this;
|
4
4
|
|
5
5
|
jQuery.expr[':'].icontains = function(a, i, m) {
|
6
6
|
var _ref, _ref1;
|
@@ -8,13 +8,24 @@
|
|
8
8
|
};
|
9
9
|
|
10
10
|
MailCatcher = (function() {
|
11
|
+
|
11
12
|
function MailCatcher() {
|
12
|
-
this.nextTab = __bind(this.nextTab, this);
|
13
|
-
this.previousTab = __bind(this.previousTab, this);
|
14
|
-
this.openTab = __bind(this.openTab, this);
|
15
|
-
this.selectedTab = __bind(this.selectedTab, this);
|
16
|
-
this.getTab = __bind(this.getTab, this);
|
17
13
|
var _this = this;
|
14
|
+
this.nextTab = function(tab) {
|
15
|
+
return MailCatcher.prototype.nextTab.apply(_this, arguments);
|
16
|
+
};
|
17
|
+
this.previousTab = function(tab) {
|
18
|
+
return MailCatcher.prototype.previousTab.apply(_this, arguments);
|
19
|
+
};
|
20
|
+
this.openTab = function(i) {
|
21
|
+
return MailCatcher.prototype.openTab.apply(_this, arguments);
|
22
|
+
};
|
23
|
+
this.selectedTab = function() {
|
24
|
+
return MailCatcher.prototype.selectedTab.apply(_this, arguments);
|
25
|
+
};
|
26
|
+
this.getTab = function(i) {
|
27
|
+
return MailCatcher.prototype.getTab.apply(_this, arguments);
|
28
|
+
};
|
18
29
|
$('#messages tr').live('click', function(e) {
|
19
30
|
e.preventDefault();
|
20
31
|
return _this.loadMessage($(e.currentTarget).attr('data-message-id'));
|
@@ -249,7 +260,7 @@
|
|
249
260
|
};
|
250
261
|
|
251
262
|
MailCatcher.prototype.addMessage = function(message) {
|
252
|
-
return $('#messages tbody').prepend($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No
|
263
|
+
return $('#messages tbody').prepend($('<tr />').attr('data-message-id', message.id.toString()).append($('<td/>').text(message.sender || "No sender").toggleClass("blank", !message.sender)).append($('<td/>').text((message.recipients || []).join(', ') || "No recipients").toggleClass("blank", !message.recipients.length)).append($('<td/>').text(message.subject || "No subject").toggleClass("blank", !message.subject)).append($('<td/>').text(this.formatDate(message.created_at))));
|
253
264
|
};
|
254
265
|
|
255
266
|
MailCatcher.prototype.scrollToRow = function(row) {
|
@@ -285,12 +296,10 @@
|
|
285
296
|
messageRow.addClass('selected');
|
286
297
|
this.scrollToRow(messageRow);
|
287
298
|
return $.getJSON("/messages/" + id + ".json", function(message) {
|
288
|
-
|
289
|
-
if(
|
299
|
+
var $ul;
|
300
|
+
if (message.recipients != null) {
|
290
301
|
message.recipients = JSON.parse(message.recipients);
|
291
302
|
}
|
292
|
-
//--------------------------------
|
293
|
-
var $ul;
|
294
303
|
$('#message .metadata dd.created_at').text(_this.formatDate(message.created_at));
|
295
304
|
$('#message .metadata dd.from').text(message.sender);
|
296
305
|
$('#message .metadata dd.to').text((message.recipients || []).join(', '));
|
@@ -378,11 +387,9 @@
|
|
378
387
|
return $.getJSON('/messages', function(messages) {
|
379
388
|
return $.each(messages, function(i, message) {
|
380
389
|
if (!_this.haveMessage(message)) {
|
381
|
-
|
382
|
-
if(typeof message.recipients != 'undefined') {
|
390
|
+
if (message.recipients != null) {
|
383
391
|
message.recipients = JSON.parse(message.recipients);
|
384
392
|
}
|
385
|
-
//--------------------------------
|
386
393
|
return _this.addMessage(message);
|
387
394
|
}
|
388
395
|
});
|
@@ -62,8 +62,10 @@ body {
|
|
62
62
|
color: black;
|
63
63
|
font-size: 12px;
|
64
64
|
font-family: Helvetica, sans-serif; }
|
65
|
+
body * html {
|
66
|
+
font-size: 75%; }
|
65
67
|
body html {
|
66
|
-
font-size:
|
68
|
+
font-size: 12px;
|
67
69
|
line-height: 2em; }
|
68
70
|
body.iframe {
|
69
71
|
background: white; }
|
@@ -89,7 +91,6 @@ body {
|
|
89
91
|
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
90
92
|
background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
|
91
93
|
background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
|
92
|
-
background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
|
93
94
|
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
94
95
|
color: #666666;
|
95
96
|
text-shadow: 1px 1px 0 white;
|
@@ -101,7 +102,6 @@ body {
|
|
101
102
|
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
102
103
|
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
103
104
|
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
104
|
-
background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
105
105
|
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
106
106
|
color: #333333;
|
107
107
|
text-decoration: none; }
|
@@ -112,7 +112,6 @@ body {
|
|
112
112
|
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
113
113
|
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
114
114
|
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
115
|
-
background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
116
115
|
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
117
116
|
color: #333333;
|
118
117
|
text-decoration: none;
|
@@ -136,7 +135,6 @@ body > header {
|
|
136
135
|
text-shadow: 0 1px 0 white;
|
137
136
|
-webkit-transition: 0.1s ease;
|
138
137
|
-moz-transition: 0.1s ease;
|
139
|
-
-ms-transition: 0.1s ease;
|
140
138
|
-o-transition: 0.1s ease;
|
141
139
|
transition: 0.1s ease; }
|
142
140
|
body > header h1 a:hover {
|
@@ -163,7 +161,6 @@ body > header {
|
|
163
161
|
background: -webkit-linear-gradient(#f4f4f4, #ececec), #ececec;
|
164
162
|
background: -moz-linear-gradient(#f4f4f4, #ececec), #ececec;
|
165
163
|
background: -o-linear-gradient(#f4f4f4, #ececec), #ececec;
|
166
|
-
background: -ms-linear-gradient(#f4f4f4, #ececec), #ececec;
|
167
164
|
background: linear-gradient(#f4f4f4, #ececec), #ececec;
|
168
165
|
color: #666666;
|
169
166
|
text-shadow: 1px 1px 0 white;
|
@@ -173,7 +170,6 @@ body > header {
|
|
173
170
|
background: -webkit-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
174
171
|
background: -moz-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
175
172
|
background: -o-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
176
|
-
background: -ms-linear-gradient(#eeeeee, #dddddd), #dddddd;
|
177
173
|
background: linear-gradient(#eeeeee, #dddddd), #dddddd;
|
178
174
|
color: #333333;
|
179
175
|
text-decoration: none; }
|
@@ -182,7 +178,6 @@ body > header {
|
|
182
178
|
background: -webkit-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
183
179
|
background: -moz-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
184
180
|
background: -o-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
185
|
-
background: -ms-linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
186
181
|
background: linear-gradient(#dddddd, #eeeeee), #eeeeee;
|
187
182
|
color: #333333;
|
188
183
|
text-decoration: none;
|
@@ -211,7 +206,6 @@ body > header {
|
|
211
206
|
cursor: pointer;
|
212
207
|
-webkit-transition: 0.1s ease;
|
213
208
|
-moz-transition: 0.1s ease;
|
214
|
-
-ms-transition: 0.1s ease;
|
215
209
|
-o-transition: 0.1s ease;
|
216
210
|
transition: 0.1s ease;
|
217
211
|
color: #333333; }
|
@@ -274,31 +268,30 @@ body > header {
|
|
274
268
|
#message > header .metadata .attachments ul {
|
275
269
|
display: inline; }
|
276
270
|
#message > header .metadata .attachments ul li {
|
277
|
-
display: -moz-inline-
|
278
|
-
-moz-box-orient: vertical;
|
271
|
+
display: -moz-inline-stack;
|
279
272
|
display: inline-block;
|
280
273
|
vertical-align: middle;
|
281
274
|
*vertical-align: auto;
|
275
|
+
zoom: 1;
|
276
|
+
*display: inline;
|
282
277
|
margin-right: 0.5em; }
|
283
|
-
#message > header .metadata .attachments ul li {
|
284
|
-
*display: inline; }
|
285
278
|
#message > header .views ul {
|
286
279
|
padding: 0 0.5em;
|
287
280
|
border-bottom: 1px solid #cccccc; }
|
288
281
|
#message > header .views .tab {
|
289
|
-
display: -moz-inline-
|
290
|
-
-moz-box-orient: vertical;
|
282
|
+
display: -moz-inline-stack;
|
291
283
|
display: inline-block;
|
292
284
|
vertical-align: middle;
|
293
|
-
*vertical-align: auto;
|
294
|
-
|
295
|
-
|
285
|
+
*vertical-align: auto;
|
286
|
+
zoom: 1;
|
287
|
+
*display: inline; }
|
296
288
|
#message > header .views .tab a {
|
297
|
-
display: -moz-inline-
|
298
|
-
-moz-box-orient: vertical;
|
289
|
+
display: -moz-inline-stack;
|
299
290
|
display: inline-block;
|
300
291
|
vertical-align: middle;
|
301
292
|
*vertical-align: auto;
|
293
|
+
zoom: 1;
|
294
|
+
*display: inline;
|
302
295
|
padding: 0.5em;
|
303
296
|
border: 1px solid #cccccc;
|
304
297
|
background: #dddddd;
|
@@ -307,8 +300,6 @@ body > header {
|
|
307
300
|
cursor: pointer;
|
308
301
|
text-shadow: 0 1px 0 #eeeeee;
|
309
302
|
text-decoration: none; }
|
310
|
-
#message > header .views .tab a {
|
311
|
-
*display: inline; }
|
312
303
|
#message > header .views .tab:not(.selected):hover a {
|
313
304
|
background-color: #eeeeee; }
|
314
305
|
#message > header .views .tab.selected a {
|
@@ -321,15 +312,14 @@ body > header {
|
|
321
312
|
margin-bottom: -2px;
|
322
313
|
cursor: default; }
|
323
314
|
#message > header .views .action {
|
324
|
-
display: -moz-inline-
|
325
|
-
-moz-box-orient: vertical;
|
315
|
+
display: -moz-inline-stack;
|
326
316
|
display: inline-block;
|
327
317
|
vertical-align: middle;
|
328
318
|
*vertical-align: auto;
|
319
|
+
zoom: 1;
|
320
|
+
*display: inline;
|
329
321
|
float: right;
|
330
322
|
margin: 0 0.25em; }
|
331
|
-
#message > header .views .action {
|
332
|
-
*display: inline; }
|
333
323
|
|
334
324
|
.fractal-analysis {
|
335
325
|
margin: 12px 0; }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailcatcher-jruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Samuel Cochran
|
7
|
+
- Samuel Cochran, Cam Song
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -211,15 +211,17 @@ dependencies:
|
|
211
211
|
prerelease: false
|
212
212
|
type: :development
|
213
213
|
description: |2
|
214
|
+
[JRuby portion] of the original MailCatcher.
|
214
215
|
MailCatcher runs a super simple SMTP server which catches any
|
215
216
|
message sent to it to display in a web interface. Run
|
216
217
|
mailcatcher, set your favourite app to deliver to
|
217
|
-
smtp://127.0.0.1:
|
218
|
-
then check out http://127.0.0.1:
|
219
|
-
email:
|
218
|
+
smtp://127.0.0.1:9000 instead of your default SMTP server,
|
219
|
+
then check out http://127.0.0.1:9090 to see the mail.
|
220
|
+
email: neosoyn@gmail.com
|
220
221
|
executables:
|
221
222
|
- mailcatcher
|
222
223
|
- catchmail
|
224
|
+
- mailweb
|
223
225
|
extensions: []
|
224
226
|
extra_rdoc_files:
|
225
227
|
- README.md
|
@@ -229,6 +231,7 @@ files:
|
|
229
231
|
- LICENSE
|
230
232
|
- bin/catchmail
|
231
233
|
- bin/mailcatcher
|
234
|
+
- bin/mailweb
|
232
235
|
- lib/mail_catcher.rb
|
233
236
|
- lib/mail_catcher/events.rb
|
234
237
|
- lib/mail_catcher/growl.rb
|
@@ -249,7 +252,7 @@ files:
|
|
249
252
|
- public/stylesheets/application.css
|
250
253
|
- public/stylesheets/analysis.xsl
|
251
254
|
- views/index.haml
|
252
|
-
homepage: https://github.com/camsong/mailcatcher
|
255
|
+
homepage: https://github.com/camsong/mailcatcher-jruby
|
253
256
|
licenses:
|
254
257
|
- MIT
|
255
258
|
metadata: {}
|