跳至主要内容

使用 Sendmail 在 CentOS 5.5 架设邮件服务器

假如你要架设一个有会员管理的网站,可能会遇到诸如“我忘记密码了”、“你有一年没来过了,有空过来瞧瞧吧”这类的问题,一般这类问题都是使用邮件解决的,比如发送一个重置密码的链接或者发送一封提醒邮件。
发送邮件的方法有很多,比如使用外面专业SMTP中继服务(一般收费惊人)、使用类似 Google Apps (Free) 的免费邮件发送服务(限制比较多,比如一天不能超过500封等),而比较廉价且彻底的解决方法应该是在自己的服务器上搭建邮件服务器(SMTP服务器)。假如你使用的是 Linux 系统,那么一般邮件服务器早已安装好了,比如 CentOS(RedHat、Fedora等)内置的 Sendmail 服务程序,你只需设置几下即可使用。

1、域名的设置

首先你要设置域名DNS的MX记录和SPF记录,一般我们只要有如下几条DNS记录就可以了:

记录类型    主机名   目标
------------------------------------
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设置方法参阅这里:http://www.openspf.org/

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”,这样外网就可以访问你的 SMTP 服务了,假如你有多个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();

参考资料:



评论

此博客中的热门博文

在CentOS 5.5里安装Git以及搭建Git服务器最简单教程

Git 是目前比较流行的免费开源的分布式版本控制系统,在Git里能够高效灵活地创建和管理分支。下面讲述如何在CentOS 5.5里安装 Git以及使用Git搭建服务端(严格来说是让一台服务器作为Git服务角色)。 安装 Git 程序 最简单的方法是在 CentOS 里添加 EPEL 软件库: su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm' 然后就可以简单地通过库安装 Git 了。 su -c 'yum install git' 使用软件库安装 Git 比较方便,而且组件依赖也会自动解决,不过由于 epel 库的 git 版本是 1.5.5 的,而目前 git 已经更新到 1.7.3 了,如果你比较纠结新版本,那么就使用源码方式安装吧,相关文章 google 一下就有了。 创建 Git 服务端(角色) 这里介绍一种比较简单方法,适合整个项目组成员都是平等的情况,方法是大家共同使用一个 ssh 帐号访问 Git 库。 先创建一个用户帐号,比如叫 devteam,然后在 devteam 的 home 目录里创建第一个库文件夹,比如叫 project1.git,然后使用 git 初始化一个裸库。 su -c 'useradd devteam' #创建 devteam 帐号 su -c 'passwd devteam' #更改 devtem 帐号的密码 su - devteam #切换到 devteam 帐号 mkdir project1.git #创建第一个项目库源码库 cd project1.git # git --bare init #初始化一个裸库 ssh-keygen #生成 ssh 钥匙,以备后用。 至此,服务端角色已经搭建完毕了。 客户端访问 Git 库 客户端可以通过如下地址访问该库: devteam@myhost:project1.git 其中 myhost 是指你的服务器ip或者机器名或者域名。 那么克隆下来的命令就是这样了: git clone devteam@myhost:pr...

Apache Cassandra 0.7 的集群配置

跟 Hadoop/HBase 一样, Apache Cassandra 也是 NoSQL 产品中最为重要的成员之一,跟 HBase 相比,因为 Cassandra 使用了一种去中心化的模式(类似memcached集群), 使用 Cassandra 搭建 NoSQL 集群更为简单容易,特别是在 0.7 版本之后,下面简述使用 Cassandra 0.7 搭建一个集群。 @ivarptr 前提条件 a、准备3台或以上的计算机。下面假设有3台运行Linux操作系统的计算机,局域网的IP地址分别为 192.168.0.100, 192.168.0.101 和 192.168.0.102。 b、Java 1.6。 c、到 这里下载 0.7.x 版本的Cassandra 二进制发行包。 1、基本配置 挑选其中的一台机开始配置,先展开 cassandra 发行包: $ tar -zxvf apache-cassandra-$VERSION.tar.gz $ cd apache-cassandra-$VERSION 其中的 conf/cassandra.yaml 文件为主要配置文件,由于 0.7 版不再采用XML格式配置文件,如果对 YAML 格式不熟悉的话最好先到 这里 了解一下。 Cassandra 在配置文件里默认设定了几个目录: data_file_directories: /var/lib/cassandra/data commitlog_directory: /var/lib/cassandra/commitlog saved_caches_directory: /var/lib/cassandra/saved_caches data_file_directories 可以一次同时设置几个不同目录,cassandra 会自动同步所有目录。另外在日志配置文件 log4j-server.properties 也有一个默认设定日志文件的目录: log4j.appender.R.File=/var/log/cassandra/system.log 一般情况下采用默认的配置即可,除非你有特殊的数据储存要求,所以现在有两种方案:一是按照默认配置创建相关的目录,二是修改配置文件采用自己指定的目录。 下面为了简...

在家用PC里体验 FreeBSD 8.1(上)

F reeBSD ( http://www.freebsd.org/ ) 是一个开源免费的操作系统,最早接触FreeBSD是约7年前在 @hplcsz 挂bbs的服务器,后来很少关注了,最近接触到 Apple 的 MacOS 和 iOS (基于FreeBSD衍生出来的操作系统)联想起FreeBSD项目,才发现它已经更新到8.1版了。 恰好家里多出一台电脑暂时没有用,于是尝试用FreeBSD 8.1配置一台适合家用的电脑(用来看看新闻灌灌水的那种),于是有了如下一篇文章。 (注:这里假设读者已经有一定的Linux/BSD基础) 首先访问 FreeBSD 项目的官方网站,下载 FreeBSD 8.1的安装镜像文件( ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.1/ ),这里提供CD版、DVD版和U盘版,考虑到我有DVD刻录机,所以下载了DVD版。 下载过程是一个漫长的等待,期间强烈推荐阅读一下官方的《FreeBSD使用手册》(中文版,以下简称《使用手册》)( http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/index.html ),如果对Linux/BSD不是很熟悉,前3章是很有必要阅读的,否则会被折腾到2012年。等待DVD镜像下载完,大概已经看到第10章了。 1、安装 FreeBSD 8.1 刻录下载回来的DVD镜像文件,从光驱启动然后选择“Quick模式”即开始安装过程。结合《使用手册》一般没有多大问题,因为这篇文章重点是如何搭建家用PC的环境,所以具体的安装过程这里就省略了。小技巧: A、 FreeBSD 必须安装在主分区,在安装之前你必须腾出一个至少10来GB的主分区。 B、 当安装问你是否安装“Ports(相当于软件商店、软件中心)”时,要选择“YES”。 C、 当安装接近完成时,程序会问你 “Would you like to browse the collection now?“,这一步是问你是否安装DVD上附带的软件,选择Yes,然后把下面这两个大块头选中,这样能避免从网络下载桌面环境的安装文件,节省时间和网络流量,减低碳排放: + X11/xorg-7.5 + gnome/gnom...