3

I want to set up Exim to send the mails through my gmail (actually my domains google apps).

I have added the router, transport and authenticator. Specifically:

gmail_route:
  driver = manualroute
  transport = gmail_relay
  route_list = * smtp.gmail.com

gmail_relay:
  driver = smtp
  port = 587
  hosts_require_auth = $host_address
  hosts_require_tls = $host_address

gmail_login:
  driver = plaintext
  public_name = LOGIN
  hide client_send = :me@domain.com:mypassword

I was able to set this up for Exim on Debian but I can't figure it out on Centos.

When I try and send while monitoring the logs it tells me "no IP address found..." and then "SMTP error from remote mail server...". It also says "Authentication required".

Here is more detail: Pretend I am sending to someone@gmail.com

someone@gmail.com R=gmail_route T=gmail_relay: SMTP error from remote mail server after MAIL FROM:<me@domain.com> SIZE=1492: 

host gmail-smtp-msa.l.google.com [2a00:1450:4001:c02::6d]: 

530-5.5.1 Authentication Required. Learn more at\n530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 k41sm12066343een.19 - gsmtp

Is there anything I can try to fix this? I am planning on using it mostly to send alert emails to myself (fail2ban, logwatch etc). And the default Exim setup seems to work but I would prefer to use my gapps email like hostname@mydomain.com - For one thing the emails went to spam before I trained my email account to put them in the inbox...

Thanks,

Jay
  • 31
  • 1
  • 2

3 Answers3

1

I have used the following config

ROUTER

send_via_gmail:
   driver = manualroute
   domains = ! +local_domains
   transport = gmail_smtp
   route_list = * smtp.gmail.com

TRANSPORT

gmail_smtp:
   driver = smtp
   port = 587
   hosts_require_auth = $host_address
   hosts_require_tls = $host_address

AUTHENTICATOR

gmail_login:
   driver = plaintext
   public_name = LOGIN
   client_send = : alex.hha@gmail.com : 7654321

Some simple test

# swaks -s 127.0.0.1 --to user@example.net --from alex.hha@gmail.com
=== Trying 127.0.0.1:25...
=== Connected to 127.0.0.1.
<-  220 mail.example.net, [127.0.0.1]
 -> EHLO mail.example.net
<-  250-mail.example.net Hello localhost [127.0.0.1]
<-  250-SIZE 52428800
<-  250-PIPELINING
<-  250-STARTTLS
<-  250 HELP
 -> MAIL FROM:<alex.hha@gmail.com>
<-  250 OK
 -> RCPT TO:<user@example.net>
<-  250 Accepted
 -> DATA
<-  354 Enter message, ending with "." on a line by itself
 -> Date: Wed, 05 Mar 2014 10:22:55 -0500
 -> To: user@example.net
 -> From: alex.hha@gmail.com
 -> Subject: test Wed, 05 Mar 2014 10:22:55 -0500
 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
 ->
 -> This is a test mailing
 ->
 -> .
<-  250 OK id=1WLDep-0004ED-Kb
 -> QUIT
<-  221 mail.example.net closing connection
=== Connection closed with remote host.

Check maillog file

# cat /var/log/exim/main.log | grep 1WLDep-0004ED-Kb
2014-03-05 10:22:55 1WLDep-0004ED-Kb <= alex.hha@gmail.com H=localhost (mail.example.net) [127.0.0.1] P=esmtp S=479
2014-03-05 10:22:55 1WLDep-0004ED-Kb gmail-smtp-msa.l.google.com [2a00:1450:4001:c02::6d] Network is unreachable
2014-03-05 10:23:00 1WLDep-0004ED-Kb => user@example.net R=send_via_gmail T=gmail_smtp H=gmail-smtp-msa.l.google.com [173.194.70.108] X=UNKNOWN:ECDHE-RSA-AES128-GCM-SHA256:128
2014-03-05 10:23:00 1WLDep-0004ED-Kb Completed

You can run exim in debug mode

# echo -e "helo localhost\nmail from:<me@domain.com>\nrcpt to:<someone@gmail.com>\nDATA\nHello world\n.\nquit" | exim -bhc 127.0.0.1 -d+all

After that you get a lot of data. Add the output to the question

ALex_hha
  • 7,193
  • 1
  • 25
  • 40
1

Did you tried this;

Using GMail as smarthost:

Note: The following must be put in the appropriate sections of the configuration file, eg, after begin authenticators.

Add a router before or instead of the dnslookup router:

gmail_route: driver = manualroute transport = gmail_relay route_list = * smtp.gmail.com

Add a transport:

gmail_relay: driver = smtp port = 587 hosts_require_auth = $host_address hosts_require_tls = $host_address

Add an authenticator (replacing myaccount@gmail.com and mypassword with your own account details):

gmail_login: driver = plaintext public_name = LOGIN hide client_send = : myaccount@gmail.com : mypassword

$host_address is used for hosts_require_auth and hosts_require_tls instead of smtp.gmail.com to avoid occasional 530 5.5.1 Authentication Required errors. These are caused by the changing IP addresses in DNS queries for smtp.gmail.com. $host_address will expand to the particular IP address that was resolved by the gmail_route router. For added security, use a per-application password. This works with Google Apps accounts as well.

SOURCE: https://wiki.archlinux.org/index.php/Exim_with_Remote_SMTP_server

Ivan
  • 11
  • 1
1

You need to change your hosts_require_auth and hosts_require_tls options to the following:

  hosts_require_auth = <; $host_address
  hosts_require_tls = <; $host_address

The problem will occur when using IPv6 to send. When sending with IPv6, $host_address will be an IPv6 address and will therefore contain colon characters (:). Colon is usually used as a list separator in Exim, so the address matching fails and Exim won't authenticate itself.

Prefixing the lists with <; changes the list separator character to a semi-colon and prevents the problem with IPv6 addresses.

Phil Ross
  • 7,279
  • 2
  • 24
  • 19