+135 410 16684Mon. - Fri. 10:00-22:00

使用 Sendmail 架设邮件服务器

使用 Sendmail 架设邮件服务器

使用 Sendmail 架设邮件服务器

Sendmail 是一款简单易用的邮件服务软件(邮件传输代理、MTA),许多 Linux 发行版都内置 Sendmail 程序,只需简单设置即可将服务器配置为可收发邮件的服务器,下面以 CentOS 6作为例子。

1、域名的设置
首先需要设置域名 DNS 的 MX 记录和 SPF 记录,一个典型的域名设置如下:

记录类型    主机名   目标
------------------------------------
A         @        123.123.123.123 (这里设置为你服务器的IP)
CNAME     www      your-domain.com
CNAME     SMTP     your-domain.com
MX        @        smtp.your-domain.com
TXT       @        v=spf1 a mx ~all

MX记录是邮件服务器必须依赖的,而TXT(SPF)是用来防止自己的邮件服务器发送的邮件不被当成垃圾邮件(spam email),假如不增加SPF记录的话对方邮箱服务器可能会把你发出的邮件直接丢弃、或者塞到垃圾邮件文件夹里,所以这条记录现今是必不可少的,更多的 SPF设置方法参阅这里

2、设置 Sendmail

下面使用的 Sendmail 版本是 8.14,设置方法非常简单,首先确保你系统已经有 sendmail 及其相关服务了:

# yum install sendmail
# yum install sendmail-cf
# yum install sendmail-devel
# yum install sendmail-milter

然后切换到 /etc/mail 目录,
a、编辑 local-host-names 文件,在里面添加你的域名,比如 yourdomain.com,一行一个域名。
b、编辑 sendmail.mc,把下面两行的注释(即 “dnl #”)删除:

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl

c、编辑 sendmail.mc,把下面这行:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl
当中的“127.0.0.1”替换成“0.0.0.0”,以允许外网可以访问你的服务器,假如有多个IP地址,而且只想让其中的某一个用作邮件服务,那么就把具体的IP地址填上去。
d、添加一个本地帐号,比如“webmaster”,并设置密码。
e、编辑 virtusertable 文件,增加这样的一行:
webmaster@yourdomain.com        webmaster
f、重新编译一下 sendmail 的设置:

# m4 sendmail.mc > sendmail.cf
# make

g、重启 sendmail 服务,这样就设置好了,你已经可以使用 mail 命令发送邮件了。

3、设置 IMAP 或 POP3 服务

虽然经过上面的设置我们已经可以对外发送邮件了(使用命令或编程方式),而且回复的邮件也能接收,不过如果我们提供IMAP或者POP3服务,就能方便各种邮件客户端收发邮件。dovecot 就是这样的一个服务。
a、先安装 dovecot 服务:

# yum install dovecot

b、编辑dovecot的配置文件,即 /etc/dovecot.conf,有些 Linux 发行版有可能位于 /etc/dovecot/conf.d/,在 #protocols 一行下面增加:
protocols imap, pop3
假如你不需要 pop3,则直接去除。
c、继续编辑dovecot的配置文件,在 #mail_location 下面增加:
mail_location = mbox:~/mail:INBOX=/var/mail/%u

e、由于这样简单配置的IMAP或者POP3的数据传输是没有经过加密的,有些 Linux 发行版会禁止明文密码登录(当然位于服务器的web程序发送邮件不受此限制),所以还需要在 #disable_plaintext_auth 这行下面增加:
disable_plaintext_auth = no
f、重启 dovecot 服务,现在可以使用邮件客户端软件来测试收发邮件了。

4、在 Web App 里发送邮件

这里举一个使用 Java 收发邮件例子。在 Java 里发送邮件一般用 JavaMail,而更简单的是使用 Apache Commons Email 组件:

Email email = new SimpleEmail();
email.setHostName("smtp.yourdomain.com");
email.setAuthenticator(new DefaultAuthenticator("webmaster", "password"));
email.setTLS(false);
email.setFrom("webmaster@yourdomain.com");
email.setSubject("Hello");
email.setMsg("This is a test mail");
email.addTo("foo@bar.com");
email.send();

参考资料:
1、CentOS Sendmail Roundcube Configuration Tutorial
2、Apache Commons Email