Project

General

Profile

Patch #31283 » mail_handler-plus_ticketid.patch

Roland Tapken, 2019-04-30 17:34

View differences:

redmine34/app/models/mail_handler.rb Tue Apr 30 13:33:29 2019 +0200 → redmine34/app/models/mail_handler.rb Tue Apr 30 16:01:21 2019 +0200
159 159
  def dispatch
160 160
    headers = [email.in_reply_to, email.references].flatten.compact
161 161
    subject = email.subject.to_s
162
    if headers.detect {|h| h.to_s =~ MESSAGE_ID_RE}
162
    if issue = get_issue_from_receiver_addresses
163
      receive_issue_reply(issue.id)
164
    elsif headers.detect {|h| h.to_s =~ MESSAGE_ID_RE}
163 165
      klass, object_id = $1, $2.to_i
164 166
      method_name = "receive_#{klass}_reply"
165 167
      if self.class.private_instance_methods.collect(&:to_s).include?(method_name)
......
377 379
    keyword
378 380
  end
379 381

  
382
  def get_issue_from_receiver_addresses
383
    local, domain = Setting.mail_from.to_s.split("@")
384
    return nil unless local && domain && Setting.plus_ticketid?
385
    local = Regexp.escape(local)
386

  
387
    [:to, :cc, :bcc].each do |field|
388
      header = @email[field]
389
      next if header.blank? || header.field.blank? || !header.field.respond_to?(:addrs)
390
      header.field.addrs.each do |addr|
391
        if addr.domain.to_s.casecmp(domain)==0 && addr.local.to_s =~ /\A#{local}\+([\d]+)\z/
392
          if issue = Issue.find_by_id($1)
393
            return issue
394
          end
395
        end
396
      end
397
    end
398
    nil
399
  end
400

  
380 401
  def get_project_from_receiver_addresses
381 402
    local, domain = handler_options[:project_from_subaddress].to_s.split("@")
382 403
    return nil unless local && domain
redmine34/app/models/mailer.rb Tue Apr 30 13:33:29 2019 +0200 → redmine34/app/models/mailer.rb Tue Apr 30 16:01:21 2019 +0200
441 441
  end
442 442

  
443 443
  def mail(headers={}, &block)
444
    headers.reverse_merge! 'X-Mailer' => 'Redmine',
444
    reply_to = nil
445
    if Setting.plus_ticketid? && @issue && @issue.id?
446
        reply_to = Setting.mail_from.to_s.sub('@', "+#{@issue.id}@")
447
    end
448
    headers.reverse_merge!({'X-Mailer' => 'Redmine',
445 449
            'X-Redmine-Host' => Setting.host_name,
446 450
            'X-Redmine-Site' => Setting.app_title,
447 451
            'X-Auto-Response-Suppress' => 'All',
448 452
            'Auto-Submitted' => 'auto-generated',
453
            'Reply-To' => reply_to,
449 454
            'From' => Setting.mail_from,
450 455
            'List-Id' => "<#{Setting.mail_from.to_s.gsub('@', '.')}>"
456
    }.reject{ |k,v| v.nil? })
451 457

  
452 458
    # Replaces users with their email addresses
453 459
    [:to, :cc, :bcc].each do |key|
redmine34/app/views/settings/_notifications.html.erb Tue Apr 30 13:33:29 2019 +0200 → redmine34/app/views/settings/_notifications.html.erb Tue Apr 30 16:01:21 2019 +0200
8 8

  
9 9
<p><%= setting_check_box :plain_text_mail %></p>
10 10

  
11
<p><%= setting_check_box :plus_ticketid %></p>
12

  
11 13
<p><%= setting_select(:default_notification_option, User.valid_notification_options.collect {|o| [l(o.last), o.first.to_s]}) %></p>
12 14

  
13 15
</div>
redmine34/config/locales/en.yml Tue Apr 30 13:33:29 2019 +0200 → redmine34/config/locales/en.yml Tue Apr 30 16:01:21 2019 +0200
388 388
  setting_mail_from: Emission email address
389 389
  setting_bcc_recipients: Blind carbon copy recipients (bcc)
390 390
  setting_plain_text_mail: Plain text mail (no HTML)
391
  setting_plus_ticketid: Append ticket id to sender address (Reply-To)
391 392
  setting_host_name: Host name and path
392 393
  setting_text_formatting: Text formatting
393 394
  setting_wiki_compression: Wiki history compression
redmine34/config/settings.yml Tue Apr 30 13:33:29 2019 +0200 → redmine34/config/settings.yml Tue Apr 30 16:01:21 2019 +0200
84 84
  default: 1
85 85
plain_text_mail:
86 86
  default: 0
87
plus_ticketid:
88
  default: 0
87 89
text_formatting:
88 90
  default: textile
89 91
cache_formatted_text:
    (1-1/1)