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 |
|
... | ... | |
55 |
59 |
sender_email = email.from.to_a.first.to_s.strip
|
56 |
60 |
# Ignore emails received from the application emission address to avoid hell cycles
|
57 |
61 |
if sender_email.downcase == Setting.mail_from.to_s.strip.downcase
|
58 |
|
if logger && logger.info
|
59 |
|
logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]"
|
60 |
|
end
|
|
62 |
logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]"
|
61 |
63 |
return false
|
62 |
64 |
end
|
63 |
65 |
# Ignore auto generated emails
|
... | ... | |
66 |
68 |
if value
|
67 |
69 |
value = value.to_s.downcase
|
68 |
70 |
if (ignored_value.is_a?(Regexp) && value.match(ignored_value)) || value == ignored_value
|
69 |
|
if logger && logger.info
|
70 |
|
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
|
71 |
|
end
|
|
71 |
logger.info "MailHandler: ignoring email with #{key}:#{value} header"
|
72 |
72 |
return false
|
73 |
73 |
end
|
74 |
74 |
end
|
75 |
75 |
end
|
76 |
76 |
@user = User.find_by_mail(sender_email) if sender_email.present?
|
77 |
77 |
if @user && !@user.active?
|
78 |
|
if logger && logger.info
|
79 |
|
logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]"
|
80 |
|
end
|
|
78 |
logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]"
|
81 |
79 |
return false
|
82 |
80 |
end
|
83 |
81 |
if @user.nil?
|
... | ... | |
88 |
86 |
when 'create'
|
89 |
87 |
@user = create_user_from_email
|
90 |
88 |
if @user
|
91 |
|
if logger && logger.info
|
92 |
|
logger.info "MailHandler: [#{@user.login}] account created"
|
93 |
|
end
|
|
89 |
logger.info "MailHandler: [#{@user.login}] account created"
|
94 |
90 |
Mailer.deliver_account_information(@user, @user.password)
|
95 |
91 |
else
|
96 |
|
if logger && logger.error
|
97 |
|
logger.error "MailHandler: could not create account for [#{sender_email}]"
|
98 |
|
end
|
|
92 |
logger.error "MailHandler: could not create account for [#{sender_email}]"
|
99 |
93 |
return false
|
100 |
94 |
end
|
101 |
95 |
else
|
102 |
96 |
# Default behaviour, emails from unknown users are ignored
|
103 |
|
if logger && logger.info
|
104 |
|
logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]"
|
105 |
|
end
|
|
97 |
logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]"
|
106 |
98 |
return false
|
107 |
99 |
end
|
108 |
100 |
end
|
... | ... | |
135 |
127 |
end
|
136 |
128 |
rescue ActiveRecord::RecordInvalid => e
|
137 |
129 |
# TODO: send a email to the user
|
138 |
|
logger.error e.message if logger
|
|
130 |
logger.error e.message
|
139 |
131 |
false
|
140 |
132 |
rescue MissingInformation => e
|
141 |
|
logger.error "MailHandler: missing information from #{user}: #{e.message}" if logger
|
|
133 |
logger.error "MailHandler: missing information from #{user}: #{e.message}"
|
142 |
134 |
false
|
143 |
135 |
rescue UnauthorizedAction => e
|
144 |
|
logger.error "MailHandler: unauthorized attempt from #{user}" if logger
|
|
136 |
logger.error "MailHandler: unauthorized attempt from #{user}"
|
145 |
137 |
false
|
146 |
138 |
end
|
147 |
139 |
|
... | ... | |
169 |
161 |
# add To and Cc as watchers before saving so the watchers can reply to Redmine
|
170 |
162 |
add_watchers(issue)
|
171 |
163 |
issue.save!
|
|
164 |
|
172 |
165 |
add_attachments(issue)
|
173 |
|
logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info
|
|
166 |
logger.info "MailHandler: issue ##{issue.id} created by #{user}"
|
174 |
167 |
issue
|
175 |
168 |
end
|
176 |
169 |
|
... | ... | |
199 |
192 |
journal.notes = cleaned_up_text_body
|
200 |
193 |
add_attachments(issue)
|
201 |
194 |
issue.save!
|
202 |
|
if logger && logger.info
|
203 |
|
logger.info "MailHandler: issue ##{issue.id} updated by #{user}"
|
204 |
|
end
|
|
195 |
logger.info "MailHandler: issue ##{issue.id} updated by #{user}"
|
205 |
196 |
journal
|
206 |
197 |
end
|
207 |
198 |
|
... | ... | |
232 |
223 |
add_attachments(reply)
|
233 |
224 |
reply
|
234 |
225 |
else
|
235 |
|
if logger && logger.info
|
236 |
|
logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic"
|
237 |
|
end
|
|
226 |
logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic"
|
238 |
227 |
end
|
239 |
228 |
end
|
240 |
229 |
end
|
... | ... | |
411 |
400 |
if user.save
|
412 |
401 |
user
|
413 |
402 |
else
|
414 |
|
logger.error "MailHandler: failed to create User: #{user.errors.full_messages}" if logger
|
|
403 |
logger.error "MailHandler: failed to create User: #{user.errors.full_messages}"
|
415 |
404 |
nil
|
416 |
405 |
end
|
417 |
406 |
else
|
418 |
|
logger.error "MailHandler: failed to create User: no FROM address found" if logger
|
|
407 |
logger.error "MailHandler: failed to create User: no FROM address found"
|
419 |
408 |
nil
|
420 |
409 |
end
|
421 |
410 |
end
|