| 24 |
24 |
|
| 25 |
25 |
attr_reader :email, :user
|
| 26 |
26 |
|
|
27 |
def logger
|
|
28 |
@logger = super || Logger.new(nil)
|
|
29 |
end
|
|
30 |
|
| 27 |
31 |
def self.receive(email, options={})
|
| 28 |
32 |
@@handler_options = options.dup
|
| 29 |
33 |
|
| ... | ... | |
| 47 |
51 |
sender_email = email.from.to_a.first.to_s.strip
|
| 48 |
52 |
# Ignore emails received from the application emission address to avoid hell cycles
|
| 49 |
53 |
if sender_email.downcase == Setting.mail_from.to_s.strip.downcase
|
| 50 |
|
logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" if logger && logger.info
|
|
54 |
logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]"
|
| 51 |
55 |
return false
|
| 52 |
56 |
end
|
| 53 |
57 |
@user = User.find_by_mail(sender_email) if sender_email.present?
|
| 54 |
58 |
if @user && !@user.active?
|
| 55 |
|
logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]" if logger && logger.info
|
|
59 |
logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]"
|
| 56 |
60 |
return false
|
| 57 |
61 |
end
|
| 58 |
62 |
if @user.nil?
|
| ... | ... | |
| 63 |
67 |
when 'create'
|
| 64 |
68 |
@user = MailHandler.create_user_from_email(email)
|
| 65 |
69 |
if @user
|
| 66 |
|
logger.info "MailHandler: [#{@user.login}] account created" if logger && logger.info
|
|
70 |
logger.info "MailHandler: [#{@user.login}] account created"
|
| 67 |
71 |
Mailer.deliver_account_information(@user, @user.password)
|
| 68 |
72 |
else
|
| 69 |
|
logger.error "MailHandler: could not create account for [#{sender_email}]" if logger && logger.error
|
|
73 |
logger.error "MailHandler: could not create account for [#{sender_email}]"
|
| 70 |
74 |
return false
|
| 71 |
75 |
end
|
| 72 |
76 |
else
|
| 73 |
77 |
# Default behaviour, emails from unknown users are ignored
|
| 74 |
|
logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]" if logger && logger.info
|
|
78 |
logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]"
|
| 75 |
79 |
return false
|
| 76 |
80 |
end
|
| 77 |
81 |
end
|
| ... | ... | |
| 104 |
108 |
end
|
| 105 |
109 |
rescue ActiveRecord::RecordInvalid => e
|
| 106 |
110 |
# TODO: send a email to the user
|
| 107 |
|
logger.error e.message if logger
|
|
111 |
logger.error e.message
|
| 108 |
112 |
false
|
| 109 |
113 |
rescue MissingInformation => e
|
| 110 |
|
logger.error "MailHandler: missing information from #{user}: #{e.message}" if logger
|
|
114 |
logger.error "MailHandler: missing information from #{user}: #{e.message}"
|
| 111 |
115 |
false
|
| 112 |
116 |
rescue UnauthorizedAction => e
|
| 113 |
|
logger.error "MailHandler: unauthorized attempt from #{user}" if logger
|
|
117 |
logger.error "MailHandler: unauthorized attempt from #{user}"
|
| 114 |
118 |
false
|
| 115 |
119 |
end
|
| 116 |
120 |
|
| ... | ... | |
| 144 |
148 |
# to save the record to trigger an issue update mail.
|
| 145 |
149 |
issue.save!
|
| 146 |
150 |
end
|
| 147 |
|
logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
|
|
151 |
logger.info "MailHandler: issue ##{issue.id} created by #{user}"
|
| 148 |
152 |
issue
|
| 149 |
153 |
end
|
| 150 |
154 |
|
| ... | ... | |
| 170 |
174 |
journal.notes = cleaned_up_text_body
|
| 171 |
175 |
add_attachments(issue)
|
| 172 |
176 |
issue.save!
|
| 173 |
|
logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
|
|
177 |
logger.info "MailHandler: issue ##{issue.id} updated by #{user}"
|
| 174 |
178 |
journal
|
| 175 |
179 |
end
|
| 176 |
180 |
|
| ... | ... | |
| 201 |
205 |
add_attachments(reply)
|
| 202 |
206 |
reply
|
| 203 |
207 |
else
|
| 204 |
|
logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic" if logger && logger.info
|
|
208 |
logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic"
|
| 205 |
209 |
end
|
| 206 |
210 |
end
|
| 207 |
211 |
end
|