mail_handler.rb.patch

Patch for app/models/mail_handler.rb - Duncan Harris, 2009-04-05 17:54

Download (1.7 KB)

View differences:

app/models/mail_handler.rb (working copy)
40 40
  # Processes incoming emails
41 41
  def receive(email)
42 42
    @email = email
43
    @user = User.active.find_by_mail(email.from.to_a.first.to_s.strip)
43
    find_user_from_email_header(email['return-path']) || find_user_from_email_header(email['sender']) || find_user_from_email_header(email['from'])
44 44
    unless @user
45 45
      # Unknown user => the email is ignored
46 46
      # TODO: ability to create the user's account
47
      logger.info "MailHandler: email submitted by unknown user [#{email.from.first}]" if logger && logger.info
47
      logger.info "MailHandler: email submitted by unknown user, Return-Path: #{email.header_string('return-path')}, Sender: #{email.header_string('sender')}, From: #{email.header_string('from')}" if logger && logger.info
48 48
      return false
49 49
    end
50 50
    User.current = @user
......
53 53

  
54 54
  private
55 55

  
56
  def find_user_from_email_header(address_header)
57
    address_spec = first_address_spec(address_header)
58
    @user = User.active.find_by_mail(address_spec.strip) if address_spec
59
  end
60

  
61
  def first_address_spec(address_header)
62
    return nil unless address_header && address_header.addrs
63
    list = address_header.addrs.map {|addr|
64
        if addr.address_group?
65
        then addr.map {|a| a.spec }
66
        else addr.spec
67
        end
68
    }.flatten
69
    list.first
70
  end
71

  
56 72
  MESSAGE_ID_RE = %r{^<redmine\.([a-z0-9_]+)\-(\d+)\.\d+@}
57 73
  ISSUE_REPLY_SUBJECT_RE = %r{\[[^\]]+#(\d+)\]}
58 74
  MESSAGE_REPLY_SUBJECT_RE = %r{\[[^\]]+msg(\d+)\]}