##// END OF EJS Templates
Adds a setting to remove incoming emails body after a delimiter (#4409)....
Jean-Philippe Lang -
r3112:a54fa93b2e28
parent child
Show More
@@ -136,7 +136,6 class MailHandler < ActionMailer::Base
136 136 if issue.subject.blank?
137 137 issue.subject = '(no subject)'
138 138 end
139 issue.description = plain_text_body
140 139 # custom fields
141 140 issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|
142 141 if value = get_keyword(c.name, :override => true)
@@ -144,6 +143,7 class MailHandler < ActionMailer::Base
144 143 end
145 144 h
146 145 end
146 issue.description = cleaned_up_text_body
147 147 # add To and Cc as watchers before saving so the watchers can reply to Redmine
148 148 add_watchers(issue)
149 149 issue.save!
@@ -174,7 +174,7 class MailHandler < ActionMailer::Base
174 174 end
175 175
176 176 # add the note
177 journal = issue.init_journal(user, plain_text_body)
177 journal = issue.init_journal(user, cleaned_up_text_body)
178 178 add_attachments(issue)
179 179 # check workflow
180 180 if status && issue.new_statuses_allowed_to(user).include?(status)
@@ -205,7 +205,7 class MailHandler < ActionMailer::Base
205 205
206 206 if !message.locked?
207 207 reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip,
208 :content => plain_text_body)
208 :content => cleaned_up_text_body)
209 209 reply.author = user
210 210 reply.board = message.board
211 211 message.children << reply
@@ -276,6 +276,9 class MailHandler < ActionMailer::Base
276 276 @plain_text_body
277 277 end
278 278
279 def cleaned_up_text_body
280 cleanup_body(plain_text_body)
281 end
279 282
280 283 def self.full_sanitizer
281 284 @full_sanitizer ||= HTML::FullSanitizer.new
@@ -299,4 +302,16 class MailHandler < ActionMailer::Base
299 302 user.save ? user : nil
300 303 end
301 304 end
305
306 private
307
308 # Removes the email body of text after the truncation configurations.
309 def cleanup_body(body)
310 delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)}
311 unless delimiters.empty?
312 regex = Regexp.new("^(#{ delimiters.join('|') })\s*$.*", Regexp::MULTILINE)
313 body = body.gsub(regex, '')
314 end
315 body.strip
316 end
302 317 end
@@ -1,6 +1,13
1 1 <% form_tag({:action => 'edit', :tab => 'mail_handler'}) do %>
2 2
3 3 <div class="box tabular settings">
4 <p>
5 <%= setting_text_area :mail_handler_body_delimiters, :rows => 5 %>
6 <br /><em><%= l(:text_line_separated) %></em>
7 </p>
8 </div>
9
10 <div class="box tabular settings">
4 11 <p><%= setting_check_box :mail_handler_api_enabled,
5 12 :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }"%></p>
6 13
@@ -12,4 +19,5
12 19 </div>
13 20
14 21 <%= submit_tag l(:button_save) %>
22
15 23 <% end %>
@@ -865,3 +865,5 bg:
865 865 label_missing_api_access_key: Missing an API access key
866 866 label_missing_feeds_access_key: Missing a RSS access key
867 867 button_show: Show
868 text_line_separated: Multiple values allowed (one line for each value).
869 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -889,3 +889,5 bs:
889 889 label_missing_api_access_key: Missing an API access key
890 890 label_missing_feeds_access_key: Missing a RSS access key
891 891 button_show: Show
892 text_line_separated: Multiple values allowed (one line for each value).
893 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -868,3 +868,5 ca:
868 868 label_missing_api_access_key: Missing an API access key
869 869 label_missing_feeds_access_key: Missing a RSS access key
870 870 button_show: Show
871 text_line_separated: Multiple values allowed (one line for each value).
872 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -871,3 +871,5 cs:
871 871 label_missing_api_access_key: Missing an API access key
872 872 label_missing_feeds_access_key: Missing a RSS access key
873 873 button_show: Show
874 text_line_separated: Multiple values allowed (one line for each value).
875 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -891,3 +891,5 da:
891 891 label_missing_api_access_key: Missing an API access key
892 892 label_missing_feeds_access_key: Missing a RSS access key
893 893 button_show: Show
894 text_line_separated: Multiple values allowed (one line for each value).
895 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -891,3 +891,5 de:
891 891 label_missing_api_access_key: Missing an API access key
892 892 label_missing_feeds_access_key: Missing a RSS access key
893 893 button_show: Show
894 text_line_separated: Multiple values allowed (one line for each value).
895 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -871,3 +871,5 el:
871 871 label_missing_api_access_key: Missing an API access key
872 872 label_missing_feeds_access_key: Missing a RSS access key
873 873 button_show: Show
874 text_line_separated: Multiple values allowed (one line for each value).
875 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -308,6 +308,7 en:
308 308 setting_activity_days_default: Days displayed on project activity
309 309 setting_display_subprojects_issues: Display subprojects issues on main projects by default
310 310 setting_enabled_scm: Enabled SCM
311 setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
311 312 setting_mail_handler_api_enabled: Enable WS for incoming emails
312 313 setting_mail_handler_api_key: API key
313 314 setting_sequential_project_identifiers: Generate sequential project identifiers
@@ -812,6 +813,7 en:
812 813 text_tracker_no_workflow: No workflow defined for this tracker
813 814 text_unallowed_characters: Unallowed characters
814 815 text_comma_separated: Multiple values allowed (comma separated).
816 text_line_separated: Multiple values allowed (one line for each value).
815 817 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
816 818 text_issue_added: "Issue {{id}} has been reported by {{author}}."
817 819 text_issue_updated: "Issue {{id}} has been updated by {{author}}."
@@ -912,3 +912,5 es:
912 912 label_missing_api_access_key: Missing an API access key
913 913 label_missing_feeds_access_key: Missing a RSS access key
914 914 button_show: Show
915 text_line_separated: Multiple values allowed (one line for each value).
916 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -901,3 +901,5 fi:
901 901 label_missing_api_access_key: Missing an API access key
902 902 label_missing_feeds_access_key: Missing a RSS access key
903 903 button_show: Show
904 text_line_separated: Multiple values allowed (one line for each value).
905 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -330,6 +330,7 fr:
330 330 setting_activity_days_default: Nombre de jours affichés sur l'activité des projets
331 331 setting_display_subprojects_issues: Afficher par défaut les demandes des sous-projets sur les projets principaux
332 332 setting_enabled_scm: SCM activés
333 setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes"
333 334 setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails"
334 335 setting_mail_handler_api_key: Clé de protection de l'API
335 336 setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels
@@ -820,6 +821,7 fr:
820 821 text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker
821 822 text_unallowed_characters: Caractères non autorisés
822 823 text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules).
824 text_line_separated: Plusieurs valeurs possibles (une valeur par ligne).
823 825 text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits
824 826 text_issue_added: "La demande {{id}} a été soumise par {{author}}."
825 827 text_issue_updated: "La demande {{id}} a été mise à jour par {{author}}."
@@ -891,3 +891,5 gl:
891 891 label_missing_api_access_key: Missing an API access key
892 892 label_missing_feeds_access_key: Missing a RSS access key
893 893 button_show: Show
894 text_line_separated: Multiple values allowed (one line for each value).
895 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -875,3 +875,5 he:
875 875 label_missing_api_access_key: Missing an API access key
876 876 label_missing_feeds_access_key: Missing a RSS access key
877 877 button_show: Show
878 text_line_separated: Multiple values allowed (one line for each value).
879 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -896,3 +896,5
896 896 label_missing_api_access_key: Missing an API access key
897 897 label_missing_feeds_access_key: Missing a RSS access key
898 898 button_show: Show
899 text_line_separated: Multiple values allowed (one line for each value).
900 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -878,3 +878,5 it:
878 878 label_missing_api_access_key: Missing an API access key
879 879 label_missing_feeds_access_key: Missing a RSS access key
880 880 button_show: Show
881 text_line_separated: Multiple values allowed (one line for each value).
882 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -900,3 +900,5 ja:
900 900 label_missing_api_access_key: Missing an API access key
901 901 label_missing_feeds_access_key: Missing a RSS access key
902 902 button_show: Show
903 text_line_separated: Multiple values allowed (one line for each value).
904 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -931,3 +931,5 ko:
931 931 label_missing_api_access_key: Missing an API access key
932 932 label_missing_feeds_access_key: Missing a RSS access key
933 933 button_show: Show
934 text_line_separated: Multiple values allowed (one line for each value).
935 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -939,3 +939,5 lt:
939 939 label_missing_api_access_key: Missing an API access key
940 940 label_missing_feeds_access_key: Missing a RSS access key
941 941 button_show: Show
942 text_line_separated: Multiple values allowed (one line for each value).
943 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -853,3 +853,5 nl:
853 853 label_missing_api_access_key: Missing an API access key
854 854 label_missing_feeds_access_key: Missing a RSS access key
855 855 button_show: Show
856 text_line_separated: Multiple values allowed (one line for each value).
857 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -866,3 +866,5
866 866 label_missing_api_access_key: Missing an API access key
867 867 label_missing_feeds_access_key: Missing a RSS access key
868 868 button_show: Show
869 text_line_separated: Multiple values allowed (one line for each value).
870 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -894,3 +894,5 pl:
894 894 label_missing_api_access_key: Missing an API access key
895 895 label_missing_feeds_access_key: Missing a RSS access key
896 896 button_show: Show
897 text_line_separated: Multiple values allowed (one line for each value).
898 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -899,3 +899,5 pt-BR:
899 899 label_missing_api_access_key: Missing an API access key
900 900 label_missing_feeds_access_key: Missing a RSS access key
901 901 button_show: Show
902 text_line_separated: Multiple values allowed (one line for each value).
903 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -883,3 +883,5 pt:
883 883 label_missing_api_access_key: Missing an API access key
884 884 label_missing_feeds_access_key: Missing a RSS access key
885 885 button_show: Show
886 text_line_separated: Multiple values allowed (one line for each value).
887 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -868,3 +868,5 ro:
868 868 label_missing_api_access_key: Missing an API access key
869 869 label_missing_feeds_access_key: Missing a RSS access key
870 870 button_show: Show
871 text_line_separated: Multiple values allowed (one line for each value).
872 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -979,3 +979,5 ru:
979 979 label_missing_api_access_key: Missing an API access key
980 980 label_missing_feeds_access_key: Missing a RSS access key
981 981 button_show: Show
982 text_line_separated: Multiple values allowed (one line for each value).
983 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -870,3 +870,5 sk:
870 870 label_missing_api_access_key: Missing an API access key
871 871 label_missing_feeds_access_key: Missing a RSS access key
872 872 button_show: Show
873 text_line_separated: Multiple values allowed (one line for each value).
874 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -867,3 +867,5 sl:
867 867 label_missing_api_access_key: Missing an API access key
868 868 label_missing_feeds_access_key: Missing a RSS access key
869 869 button_show: Show
870 text_line_separated: Multiple values allowed (one line for each value).
871 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -886,3 +886,5
886 886 label_missing_api_access_key: Missing an API access key
887 887 label_missing_feeds_access_key: Missing a RSS access key
888 888 button_show: Show
889 text_line_separated: Multiple values allowed (one line for each value).
890 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -920,3 +920,5 sv:
920 920 label_missing_api_access_key: Missing an API access key
921 921 label_missing_feeds_access_key: Missing a RSS access key
922 922 button_show: Show
923 text_line_separated: Multiple values allowed (one line for each value).
924 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -868,3 +868,5 th:
868 868 label_missing_api_access_key: Missing an API access key
869 869 label_missing_feeds_access_key: Missing a RSS access key
870 870 button_show: Show
871 text_line_separated: Multiple values allowed (one line for each value).
872 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -898,3 +898,5 tr:
898 898 label_missing_api_access_key: Missing an API access key
899 899 label_missing_feeds_access_key: Missing a RSS access key
900 900 button_show: Show
901 text_line_separated: Multiple values allowed (one line for each value).
902 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -867,3 +867,5 uk:
867 867 label_missing_api_access_key: Missing an API access key
868 868 label_missing_feeds_access_key: Missing a RSS access key
869 869 button_show: Show
870 text_line_separated: Multiple values allowed (one line for each value).
871 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -930,3 +930,5 vi:
930 930 label_missing_api_access_key: Missing an API access key
931 931 label_missing_feeds_access_key: Missing a RSS access key
932 932 button_show: Show
933 text_line_separated: Multiple values allowed (one line for each value).
934 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -964,3 +964,5
964 964 label_missing_api_access_key: Missing an API access key
965 965 label_missing_feeds_access_key: Missing a RSS access key
966 966 button_show: Show
967 text_line_separated: Multiple values allowed (one line for each value).
968 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -895,3 +895,5 zh:
895 895 label_missing_api_access_key: Missing an API access key
896 896 label_missing_feeds_access_key: Missing a RSS access key
897 897 button_show: Show
898 text_line_separated: Multiple values allowed (one line for each value).
899 setting_mail_handler_body_delimiters: Truncate emails after one of these lines
@@ -116,6 +116,8 notified_events:
116 116 default:
117 117 - issue_added
118 118 - issue_updated
119 mail_handler_body_delimiters:
120 default: ''
119 121 mail_handler_api_enabled:
120 122 default: 0
121 123 mail_handler_api_key:
@@ -370,6 +370,7 input#time_entry_comments { width: 90%;}
370 370
371 371 .tabular.settings p{ padding-left: 300px; }
372 372 .tabular.settings label{ margin-left: -300px; width: 295px; }
373 .tabular.settings textarea { width: 99%; }
373 374
374 375 fieldset.settings label { display: block; }
375 376
@@ -26,10 +26,22 in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras
26 26 sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum
27 27 id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus
28 28 eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique
29 sed, mauris. Pellentesque habitant morbi tristique senectus et netus et
29 sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et
30 30 malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse
31 31 platea dictumst.
32 32
33 --- This line starts with a delimiter and should not be stripped
34
35 This paragraph is before delimiters.
36
37 BREAK
38
39 This paragraph is between delimiters.
40
41 ---
42
43 This paragraph is after the delimiter so it shouldn't appear.
44
33 45 Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque
34 46 sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem.
35 47 Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et,
@@ -279,10 +279,62 class MailHandlerTest < ActiveSupport::TestCase
279 279 assert_equal 'This is a html-only email.', issue.description
280 280 end
281 281
282 context "truncate emails based on the Setting" do
283 context "with no setting" do
284 setup do
285 Setting.mail_handler_body_delimiters = ''
286 end
287
288 should "add the entire email into the issue" do
289 issue = submit_email('ticket_on_given_project.eml')
290 assert_issue_created(issue)
291 assert issue.description.include?('---')
292 assert issue.description.include?('This paragraph is after the delimiter')
293 end
294 end
295
296 context "with a single string" do
297 setup do
298 Setting.mail_handler_body_delimiters = '---'
299 end
300
301 should "truncate the email at the delimiter for the issue" do
302 issue = submit_email('ticket_on_given_project.eml')
303 assert_issue_created(issue)
304 assert issue.description.include?('This paragraph is before delimiters')
305 assert issue.description.include?('--- This line starts with a delimiter')
306 assert !issue.description.match(/^---$/)
307 assert !issue.description.include?('This paragraph is after the delimiter')
308 end
309 end
310
311 context "with multiple strings" do
312 setup do
313 Setting.mail_handler_body_delimiters = "---\nBREAK"
314 end
315
316 should "truncate the email at the first delimiter found (BREAK)" do
317 issue = submit_email('ticket_on_given_project.eml')
318 assert_issue_created(issue)
319 assert issue.description.include?('This paragraph is before delimiters')
320 assert !issue.description.include?('BREAK')
321 assert !issue.description.include?('This paragraph is between delimiters')
322 assert !issue.description.match(/^---$/)
323 assert !issue.description.include?('This paragraph is after the delimiter')
324 end
325 end
326 end
327
282 328 private
283 329
284 330 def submit_email(filename, options={})
285 331 raw = IO.read(File.join(FIXTURES_PATH, filename))
286 332 MailHandler.receive(raw, options)
287 333 end
334
335 def assert_issue_created(issue)
336 assert issue.is_a?(Issue)
337 assert !issue.new_record?
338 issue.reload
339 end
288 340 end
General Comments 0
You need to be logged in to leave comments. Login now