diff --git a/lib/mail_catcher.rb b/lib/mail_catcher.rb index 30e27dfb..7387911d 100644 --- a/lib/mail_catcher.rb +++ b/lib/mail_catcher.rb @@ -86,6 +86,7 @@ def log_exception(message, context, exception) :http_ip => "127.0.0.1", :http_port => "1080", :http_path => "/", + :max_mail_to_keep => -1, :verbose => false, :daemon => !windows?, :browse => false, @@ -126,6 +127,10 @@ def parse! arguments=ARGV, defaults=@defaults options[:http_port] = port end + parser.on("--max_mail_to_keep NUM", Integer, "Set the maximum number of mails to keepr") do |num| + options[:max_mail_to_keep] = num + end + parser.on("--http-path PATH", String, "Add a prefix to all HTTP paths") do |path| clean_path = Rack::Utils.clean_path_info("/#{path}") diff --git a/lib/mail_catcher/mail.rb b/lib/mail_catcher/mail.rb index 37eeeaac..cd3ebcc9 100644 --- a/lib/mail_catcher/mail.rb +++ b/lib/mail_catcher/mail.rb @@ -157,4 +157,13 @@ def delete_message!(message_id) @delete_messages_query.execute(message_id) and @delete_message_parts_query.execute(message_id) end + + def delete_older_messages!(max_mail_to_keep = MailCatcher::options[:max_mail_to_keep]) + return if max_mail_to_keep == -1 + @delete_older_messages_query ||= db.prepare "DELETE FROM message WHERE id NOT IN (SELECT id FROM message ORDER BY created_at DESC LIMIT ?)" + @delete_older_message_parts_query ||= db.prepare "DELETE FROM message_part WHERE id NOT IN (SELECT id FROM message_part ORDER BY created_at DESC LIMIT ?)" + + @delete_older_messages_query.execute(max_mail_to_keep) and + @delete_older_message_parts_query.execute(max_mail_to_keep) + end end diff --git a/lib/mail_catcher/smtp.rb b/lib/mail_catcher/smtp.rb index 00e2209e..6a00e541 100644 --- a/lib/mail_catcher/smtp.rb +++ b/lib/mail_catcher/smtp.rb @@ -44,6 +44,7 @@ def receive_data_chunk(lines) def receive_message MailCatcher::Mail.add_message current_message + MailCatcher::Mail.delete_older_messages! puts "==> SMTP: Received message from '#{current_message[:sender]}' (#{current_message[:source].length} bytes)" true rescue => exception