summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/mail_handler.rb8
-rw-r--r--lib/redmine/imap.rb2
-rw-r--r--lib/redmine/pop3.rb2
3 files changed, 10 insertions, 2 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index da2c5c4e5..e2dba0e41 100644
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -46,6 +46,14 @@ class MailHandler < ActionMailer::Base
super(email)
end
+ # Receives an email and rescues any exception
+ def self.safe_receive(*args)
+ receive(*args)
+ rescue => e
+ logger.error "An unexpected error occurred when receiving email: #{e.message}" if logger
+ return false
+ end
+
# Extracts MailHandler options from environment variables
# Use when receiving emails with rake tasks
def self.extract_options_from_env(env)
diff --git a/lib/redmine/imap.rb b/lib/redmine/imap.rb
index e164ba8ac..dc4334c2d 100644
--- a/lib/redmine/imap.rb
+++ b/lib/redmine/imap.rb
@@ -32,7 +32,7 @@ module Redmine
imap.uid_search(['NOT', 'SEEN']).each do |uid|
msg = imap.uid_fetch(uid,'RFC822')[0].attr['RFC822']
logger.debug "Receiving message #{uid}" if logger && logger.debug?
- if MailHandler.receive(msg, options)
+ if MailHandler.safe_receive(msg, options)
logger.debug "Message #{uid} successfully received" if logger && logger.debug?
if imap_options[:move_on_success]
imap.uid_copy(uid, imap_options[:move_on_success])
diff --git a/lib/redmine/pop3.rb b/lib/redmine/pop3.rb
index 3ceeeb4a0..fcedb5003 100644
--- a/lib/redmine/pop3.rb
+++ b/lib/redmine/pop3.rb
@@ -36,7 +36,7 @@ module Redmine
pop_session.each_mail do |msg|
message = msg.pop
message_id = (message =~ /^Message-I[dD]: (.*)/ ? $1 : '').strip
- if MailHandler.receive(message, options)
+ if MailHandler.safe_receive(message, options)
msg.delete
logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug?
else