Using Gmail as Sendmail's relay
Comcast just started blocking port 25 at my house which caused sendmail to be unable to connect to external mail servers to deliver mail. Some people have been able to convince Comcast to open up the port for them but we weren't so lucky. Instead, I changed sendmail to use Gmail's SMTP server as its relay server.
Before making these changes I'd see lots of errors in
/var/log/mail.log ending in
stat=Deferred: Connection timed out with aspmx2.googlemail.com. or something similar. Trying to
telnet aspmx2.googlemail.com 25 would result in a timeout.
I found all the information on how to do this in these two articles; Yan Li's Words: Gmail, Fetchmail and Sendmail on UNIX/Linux and Linux, Sendmail and Gmail.com.
All of this was done on a server running Ubuntu 8.04.2 and sendmail 8.14.2.
Edit your `
/etc/mail/sendmail.mc and add the following above the
MAILER_DEFINITIONS block at the bottom. I tried putting these lines at the very bottom of the file the first time and it didn't work. I suggest copy/pasting because the quotes are very strange.
define(`SMART_HOST',`smtp.gmail.com')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
Create the /etc/mail/auth/client-info file by running:
$ mkdir -p /etc/mail/auth $ chmod 700 /etc/mail/auth $ touch /etc/mail/auth/client-info $ chmod 600 /etc/mail/auth/client-info
/etc/mail/auth/client-info and fill it with the lines below. Replace user_id with your Gmail user id (email@example.com) and password with your password. Make sure there is a blank line at the end of the file.
AuthInfo:smtp.gmail.com "U:smmsp" "I:user_id" "P:password" "M:PLAIN" AuthInfo:smtp.gmail.com:587 "U:smmsp" "I:user_id" "P:**password" "M:PLAIN"
Compile the client-info.db file.
$ cd /etc/mail/auth $ makemap -r hash client-info.db < client-info
Compile update sendmail.cf with our sendmail.mc changes.
$ cd /etc/mail $ make
Reload the sendmail configuration.
Now if you check your /var/log/mail.log you should see any queued messages being sent properly. You should see
stat=Sent. If not, make sure you didn't miss a step above.