I needed to configure a sendmail server that had a dynamic IP address to route email out through an SMTP server belonging to an ISP, since otherwise some email servers might reject email from that sendmail server. Some email servers will compare a sending email server's IP address to lists of addresses known to be assigned by ISP's as dynamic IP addresses. By doing so, ISP's hope to block spam from home user's PCs that have been compromised and put to use as zombie systems by spammers.
The steps below can be taken on a Linux system running sendmail to have it send email via a "smart host" server. In essence, instead of the sendmail server sending email directly to other email servers, it transmits all email to another server, the "smart host", which handles the task of transmitting the received email to the recipients' servers.
In /etc/mail/sendmail.mc
, look for the following section:
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
dnl define(`SMART_HOST', `smtp.your.provider')dnl
dnl #
Remove the dnl
from the beginning of the
dnl define(`SMART_HOST', `smtp.your.provider')dnl
line and
replace smtp.your.provider
with the smart host you will be
using, e.g. mail.example.com
.
define(`SMART_HOST', `mail.example.com')dnl
In /etc/mail/access
add the following line, substituting
the actual SMTP server you will need to use for mail.example.com
and your actual username and password on the smart host server for
myloginname
and mypasswd
:
Authinfo:mail.example.com "U:myloginname" "P:mypasswd" "M:Plain"
Then regenerate the /etc/mail/access.db
file with
makemap hash /etc/mail/access </etc/mail/access
.
Regenerate /etc/mail/sendmail.cf
with
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
.
Then restart sendmail with service sendmail restart
or
/etc/init.d/sendmail restart
.
Once you have taken the above steps, you can send a test message from the system. Sending one to a test email address on another system that will allow you to view the message headers is ideal. At the destination, look at the message headers for the email you sent. You should see it passing through the smart host.
When I sent out a test message after making the changes above, the message
didn't reach the destination. I checked the mail queue with mailq
and saw the message had not gone out because of an "AUTH failure".
# mailq
/var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
m43M1HT8032701 31 Sat May 3 18:01 <johnsmith@myserver.com>
(Deferred: Temporary AUTH failure)
<melvin@example.com>
I had sendmail attempt to send the queued message immediately and display
information on its progress with sendmail -q 0 -v
(the
-v
provides "verbose" information).
# sendmail -q 0 -v
Running /var/spool/mqueue/m43M1HT8032701 (sequence 1 of 1)
<melvin@example.com>... Connecting to smtp.atlanticbb.net. via relay...
220 ECHO Labs SMTP Service - MX01
>>> EHLO myserver.com
250-BL-106 says EHLO to 72.45.13.244:1097
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-AUTH=LOGIN
250 AUTH LOGIN
>>> QUIT
221 BL-106 closing connection
<melvin@example.com>... Deferred: Temporary AUTH failure
Closing connection to smtp.atlanticbb.net.
In this case I was using smtp.atlanticbb.net as the smart host. I could
see it supports an AUTH type of "LOGIN", but I didn't see "PLAIN" listed.
I edited /etc/mail/access
, replacing "M:Plain"
with "M:Login"
.
Authinfo:smtp.atlanticbb.net "U:myloginname" "P:mypasswd" "M:Login"
I then ran makemap hash /etc/mail/access < /etc/mail/access
again. Then when I had sendmail process the mail queue immediately again,
the message was successfully transmitted.
# sendmail -q 0 -v
Running /var/spool/mqueue/m43M1HT8032701 (sequence 1 of 1)
<melvin@example.com>... Connecting to smtp.atlanticbb.net. via relay...
220 ECHO Labs SMTP Service - MX02
>>> EHLO myserver.com
250-BL-206 says EHLO to 72.45.13.244:2430
250-8BITMIME
250-PIPELINING
250-AUTH=LOGIN
250-AUTH LOGIN
250 ENHANCEDSTATUSCODES
>>> AUTH LOGIN
334 VXNlcm4hcWU6
>>> bW9vbnBvbW40
334 UGFzc2dvdmQ6
>>> MVN0b2A1Njd=
235 Authed. Go on.
>>> MAIL From:<jsmith@myserver.com>
250 MAIL FROM accepted
>>> RCPT To:<melvin@example.com>
>>> DATA
250 Recipient Accepted - Will relay per rbIP
354 continue. finished with "\r\n.\r\n"
>>> .
250 OK D4/2C-23466-1B9EC184
<melvin@example.com>... Sent (OK D4/2C-23466-1B9EC184)
Closing connection to smtp.atlanticbb.net.
>>> QUIT
221 BL-206 closing connection