diff --git a/assets/javascripts/mailcatcher.js.coffee b/assets/javascripts/mailcatcher.js.coffee
index 3e479ba..44112c5 100644
--- a/assets/javascripts/mailcatcher.js.coffee
+++ b/assets/javascripts/mailcatcher.js.coffee
@@ -188,12 +188,14 @@ class MailCatcher
$("#messages tbody tr").show()
addMessage: (message) ->
- $("
").attr("data-message-id", message.id.toString())
+ row = $("
").attr("data-message-id", message.id.toString())
.append($(" | ").text(message.sender or "No sender").toggleClass("blank", !message.sender))
.append($(" | ").text((message.recipients || []).join(", ") or "No receipients").toggleClass("blank", !message.recipients.length))
.append($(" | ").text(message.subject or "No subject").toggleClass("blank", !message.subject))
.append($(" | ").text(@formatDate(message.created_at)))
- .prependTo($("#messages tbody"))
+ if 'from_server' of message
+ row = row.append($(" | ").text(message.from_server or "Unknown").toggleClass("blank", !message.from_server))
+ row.prependTo($("#messages tbody"))
@updateMessagesCount()
scrollToRow: (row) ->
diff --git a/lib/mail_catcher.rb b/lib/mail_catcher.rb
index 79c98e8..d4d1f3b 100644
--- a/lib/mail_catcher.rb
+++ b/lib/mail_catcher.rb
@@ -83,6 +83,7 @@ module MailCatcher extend self
:sqlite_db => ':memory:',
:delete_older_than => nil,
:keep_num_emails => nil,
+ :show_from_server => false,
}
def options
@@ -93,6 +94,10 @@ module MailCatcher extend self
options[:quit]
end
+ def show_from_server?
+ options[:show_from_server]
+ end
+
def parse! arguments=ARGV, defaults=@defaults
@@defaults.dup.tap do |options|
OptionParser.new do |parser|
@@ -123,6 +128,10 @@ module MailCatcher extend self
options[:quit] = false
end
+ parser.on("--show-from-server", "Show From Server column") do
+ options[:show_from_server] = true
+ end
+
parser.on("--sqlite-db PATH", "Set the path to the sqlite database, default in-memory only") do |db|
options[:sqlite_db] = db
end
diff --git a/lib/mail_catcher/mail.rb b/lib/mail_catcher/mail.rb
index bcdbcc9..e044392 100644
--- a/lib/mail_catcher/mail.rb
+++ b/lib/mail_catcher/mail.rb
@@ -13,6 +13,7 @@ module MailCatcher::Mail extend self
sender TEXT,
recipients TEXT,
subject TEXT,
+ from_server TEXT,
source BLOB,
size TEXT,
type TEXT,
@@ -38,12 +39,13 @@ module MailCatcher::Mail extend self
end
def add_message(message)
- @add_message_query ||= db.prepare("INSERT INTO message (sender, recipients, subject, source, type, size, created_at) VALUES (?, ?, ?, ?, ?, ?, datetime('now'))")
+ @add_message_query ||= db.prepare("INSERT INTO message (sender, recipients, subject, from_server, source, type, size, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'))")
mail = Mail.new(message[:source])
+ from_server = mail.received ? mail.received.value.sub(/^from\s+/, '').sub(/\s+.*$/, '') : nil
sender = (mail.from && !mail.from.empty?) ? mail.from : message[:sender]
recipients = (mail.to && !mail.to.empty?) ? mail.to : message[:recipients]
- @add_message_query.execute(sender, JSON.generate(recipients), mail.subject, message[:source], mail.mime_type || "text/plain", message[:source].length)
+ @add_message_query.execute(sender, JSON.generate(recipients), mail.subject, from_server, message[:source], mail.mime_type || "text/plain", message[:source].length)
message_id = db.last_insert_row_id
parts = mail.all_parts
parts = [mail] if parts.empty?
@@ -77,7 +79,9 @@ module MailCatcher::Mail extend self
end
def messages
- @messages_query ||= db.prepare "SELECT id, sender, recipients, subject, size, created_at FROM message ORDER BY created_at, id ASC"
+ @messages_query ||= db.prepare MailCatcher.show_from_server? ?
+ "SELECT id, sender, recipients, subject, from_server, size, created_at FROM message ORDER BY created_at, id ASC" :
+ "SELECT id, sender, recipients, subject, size, created_at FROM message ORDER BY created_at, id ASC"
@messages_query.execute.map do |row|
Hash[row.fields.zip(row)].tap do |message|
message["recipients"] &&= JSON.parse(message["recipients"])
@@ -89,6 +93,9 @@ module MailCatcher::Mail extend self
@message_query ||= db.prepare "SELECT * FROM message WHERE id = ? LIMIT 1"
row = @message_query.execute(id).next
row && Hash[row.fields.zip(row)].tap do |message|
+ unless MailCatcher.show_from_server?
+ message.delete('from_server')
+ end
message["recipients"] &&= JSON.parse(message["recipients"])
end
end
diff --git a/views/index.erb b/views/index.erb
index 015410e..bfd1d1f 100644
--- a/views/index.erb
+++ b/views/index.erb
@@ -27,6 +27,9 @@
To |
Subject |
Received |
+ <% if MailCatcher.show_from_server? %>
+ From Server |
+ <% end %>