diff options
-rw-r--r-- | app/models/mail_server_log.rb | 6 | ||||
-rw-r--r-- | spec/models/mail_server_log_spec.rb | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/app/models/mail_server_log.rb b/app/models/mail_server_log.rb index 755584b90..3e7e0beb4 100644 --- a/app/models/mail_server_log.rb +++ b/app/models/mail_server_log.rb @@ -122,10 +122,14 @@ class MailServerLog < ActiveRecord::Base # We also check the email prefix so that we could, for instance, separately handle a staging and production # instance running on the same server with different email prefixes. + # We also allow an arbitrary subdomain on the incoming email domain. Why you may ask? Well, if for instance + # you're using a "cloud" email provider to handle emails for your domain but you only want to pass the + # Alaveteli emails to your own server you need to forward the Alaveteli emails to a different domain, in this + # case a subdomain. Then, you make the MX records for the subdomain point at your server. def MailServerLog.email_addresses_on_line(line) prefix = Regexp::quote(Configuration::incoming_email_prefix) domain = Regexp::quote(Configuration::incoming_email_domain) - line.scan(/#{prefix}request-[^\s]+@#{domain}/).sort.uniq + line.scan(/#{prefix}request-[^\s]+@\w*\.?#{domain}/).sort.uniq end def MailServerLog.request_sent?(ir) diff --git a/spec/models/mail_server_log_spec.rb b/spec/models/mail_server_log_spec.rb index d0a1d202f..bcd74c380 100644 --- a/spec/models/mail_server_log_spec.rb +++ b/spec/models/mail_server_log_spec.rb @@ -89,6 +89,11 @@ describe MailServerLog do it "ignores an email where the . is substituted for something else" do MailServerLog.email_addresses_on_line("foi+request-14-e0e09f97@exampledcom").should be_empty end + + it "accept emails with an arbitrary subdomain" do + MailServerLog.email_addresses_on_line("foi+request-14-e0e09f97@foo.example.com").should == + ["foi+request-14-e0e09f97@foo.example.com"] + end end context "Postfix" do |