用 esmtp 通过 Gmail 邮局进行转发系统邮件 v0.1b (正在修正)

作者:北南南北
来自:LinuxSir.Org
摘要:esmtp是一款邮件转发程序,本文主要是介绍esmtp的安装配置及使用。esmtp主要应用领域是在服务器资源相对紧张,通过esmtp来把系统邮件转发到专用邮件服务器上。本文也举了个实例,如何把系统邮件转发到Gmail邮箱或企业邮局上,这对于中小企业节省开支,还是有点帮助的;

目录:

  1   esmtp简介;
  2   本文应用范围;
  3   安装 esmpt
  4   配置esmtp;
          4.1   创建用户;
          4.2   包装sendmail 
          4.3   Google企业邮局和Gmail说明;
          4.4   配置esmtp;
  5   关于本文;
  6   参考文档;
  7   相关文档;


+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++

1 esmtp 简介;

esmtp 是一款邮件转发程序,原理是模拟sendmail行为进行系统邮件转发。应用领域是服务器端,当我们没用专用的邮件服务器,如何把系统邮件转发出来。

2 本文应用范围;

写这个文章的前提是咱们没有专用的邮件服务器,并且为了减轻服务器压力,服务器端并没有做邮件服务器,并且还要把系统邮件转发出去。应用主要有Web程序,有时Web用户创建,服务器会把密码发到用户信箱,或用户找回密码 …… 还有服务器的一些管理日志、崩溃信息等,也需要发送到管理员信箱。

举例说明:LinuxSir.org 只有一台服务器,而且压力非常大。所以在这台服务器上不可能做邮件服务器。但系统邮件必须转发出去,因为上面有linuxsir.org的文章管理系统和论坛系统,因为用户需要认证。服务器要为用户发送密码等方面的邮件。所以必须有一个邮局系统来处理这些事。但linuxsir.org又不能在这台服务器上架邮局,所以就要想办法把系统邮件转发出去,让其它邮局来处理。 这样解释或许明白点吧。

3 安装 esmpt

如果您的发行版是 slackware, 您可以到 http://www.slackbuilds.org 上取回编译脚本来安装libesmtp和 esmtp,libestmp是esmtp的库文件。您可以自己源码包make安装;

对于其它发行版来说,都可以通过源码包来make安装;

对于常用发行版,可以用发行版所采用的软件包管理工具来安装,不同的发行版有不同的工具,其实大同小异;

[root@linuxsir:beinan]$ sudo apt-get  install esmtp  注:在debian、ubuntu 等在线安装方法;
[root@linuxsir:beinan]# yum install esmtp    注:Fedora、Redhat 等系统安装方法;


安装完成后,esmtp 会伪装成sendmail来发信。我们查看sendmail可执行文件得知;


# ls -la /usr/sbin/sendmail

lrwxrwxrwx 1 root root 14 2007-10-03 13:38 /usr/sbin/sendmail -> /usr/bin/esmtp


4 配置esmtp;

在安装好后,根据esmtp 文档,写一下 esmtprc 就可以用了,文件放在/etc目录下,或放在apache守护程序的拥有者的家目录下(一般情况下,就是apache 用户来执行,如果您自己编译和修改了其它用户,就要用其它用户),当放在apache的家目录下,要创建一个.esmtp 的文件。但经过测试并非如此,并不能把信转出去。因为apache用户由于环境变量的问题,不适合esmtp转信的环境;所以我们必须包装sendmail。

4.1 创建用户;

因为esmtp也要通用一个用户来发信,所以我们必须创建一个用户,可以用这个用户来专门发送系统邮件;您可以通过adduser 命令来添加用户。比如创建一个用户linuxsir的UID是5505,用户组的GID也是5505,家目录位于 /home/linuxsir目录;

# groupadd -g 5505 linuxsir
# useradd -u 5505 -g 5505 linuxsir
# useradd -u 5505 -g 5505 linuxsir  -d /home/linuxsir
# mkdir /home/linuxsir
# cp /etc/skel/.[a-z]*   /home/linuxsir/
#chown -R linuxsir:linuxsir   /home/linuxsir


我们再来查看一下是用户是否创建成功,我们要查看linuxsir 这个ID,以及/etc/passwd配置文件;

#id linuxsir
uid=5505(linuxsir) gid=5505(linuxsir) groups=5505(linuxsir)

#more /etc/passwd | grep linuxsir
linuxsir:x:5505:5505::/home/linuxsir:/bin/bash


4.2

包装sendmail

因为apache用户由于环境变量的问题,不适合esmtp转信的环境;所以我们必须包装sendmail。原理就是通过su 命令 切换到linuxsir这个用户下,通过这个用户来发邮件;

打开一个终端,把下面的内容贴到终端里即可; 本脚本由传说中的花花同学大力协助,在此感谢之中 ;) ;

#!/bin/sh -x
cat  sendmail.c  <<OO
int main(int argc, char *argv[]){
        setreuid(5505, 5505);
        setregid(5505, 5505);
        setenv("HOME","/home/linuxsir");
        execvp("/usr/bin/esmtp", argv);
}
OO
gcc -s -o sendmail sendmail.c
rm /usr/sbin/sendmail
cp sendmail  /usr/sbin/sendmail
chown root /usr/sbin/sendmail
chmod +s /usr/sbin/sendmail


注:setreuid 和setregid 是分别设置UID和GID的,要根据自己所创建的用户的UID和GID来添写这个值,因为我创建的用户linuxsir的UID和GID都是5505 ,所以就写5505;/home/linuxsir是linuxsir这个用户的家目录,也是根据你所创建用户的家目录来设置,这个也是要你根据情况来修改;

4.3 Google企业邮局和Gmail说明;

Gmail是全球最好的邮局系统,我们可以通过Gmail来帮助我们搭建企业级应用。我们就可以不必自己单独做邮件服务器了。一切应用都交给Google来处理。我们可以在企业邮局上为用户创建信箱 …… 优势多多,试试就知道了;

您可以通过 http://www.google.com/a/ 来申请属于自己的邮局系统。当然您得有一个域名,并且您有域名管理权,能自己设置DNS解析;

比如 LinuxSir.Org ,要在域名提供商的DNS上做解析,具体流程是:

确认 linuxsir.org 的所有权,要根据您创建邮局系统时的提示做;要在 linuxsir.org 的WWW服务器端,创建一个文件,要能访问的到。然后让Google来验证通过;

然后在域名提供商所提供的域名DNS管理界面,清空所有MX记录,并添加下面的MX记录;

Priority

Mail Server

1 ASPMX.L.GOOGLE.COM.
5 ALT1.ASPMX.L.GOOGLE.COM.

5

ALT2.ASPMX.L.GOOGLE.COM.

10

ASPMX2.GOOGLEMAIL.COM.

10

ASPMX3.GOOGLEMAIL.COM.

10

ASPMX4.GOOGLEMAIL.COM.

10

ASPMX5.GOOGLEMAIL.COM.


因为 Google 的CNAME服务器 ghs.google.com 被封掉了,所以我们可以省略这一过程。但为了访问方便,我们可以用三级域名跳转的办法。 您可以添加一个三级域名指向到Gmail上的您的企业邮局,比如linuxsir.org 在Google上的邮局地址是 http://mail.google.com/a/linuxsir.org ,那我们就要做一个 http://mail.linuxsir.org 的域名跳转到 http://mail.google.com/a/linuxsir.org 。

纵观全球互联网企业所提供的邮箱或邮局,没有一家能和Google所提供的相比。优势是大容量、高效、安全、稳定 …… ,我们把一切赞美的词都给Google都不为过 …… 对不对?

我们申请Google的信箱也好,还是Google的邮局也罢,目的就是让esmtp把服务器系统上的邮件转发出去。通过谁转发更可靠?就是Google。如果您想以 beinan@linuxsir.org 来转信,就要申请Google邮局。如果只是用一个beinan@gmail.com 的信箱来把服务器系统的信转发出去,就不必申请邮局。

4.4 配置esmtp;

我们还是接着前面的例子来说明如何配置esmtp,首先我们在Google申请了自己的信箱或邮局,这是前提。 如果您在Google上申请了企业邮局,要在里面创建一个信箱,比如我想用linuxsir.org@linuxsir.org 来转信,就要在linuxsir.org 的邮局上创建一个linuxsir.org 为用户名的信箱。设置好密码,以linuxsir.org 用户名登录后,要在设置中把pop服务打开 ……

接着我们在服务器端,在linuxsir用户的家目录下创建一个.esmtprc 的文件,内容大体如下;

identity linuxsir.org@linuxsir.org 注:用户名,要完整的。Gmail也大体如此,自己试试;
hostname smtp.gmail.com:587 注:Google的SMTP服务器地址;
username "linuxsir.org@linuxsir.org" 注:用户名,要完整的信箱格式,Gmail 也大体如此,请自己试;
password "123456" 注:linuxsir.org@linuxsir.org 信箱的密码
starttls required


如果你有专用的邮件服务器,配置文件也大体差不多的,自己尝试一下;

验证是否成功,请用mailx程序测试,如果linuxsir.org@linuxsir.org 收到邮件,则表示成功,否则失败~

#mailx linuxsir.org@linuxsir.org
Subject: i test linuxsir;
thanks a lots , linuxsir.org



注:mailx linuxsir.org@linuxsir.org 后按回车,在Subject:后面写上主题,然后再按回车,这样就可以写的信的内容了。写完后,按ctrl+d来发信 …… 发送后,到linuxsir.org@linuxsir.org 去收信 …… 值得注意的是,Gmail可能会把信扔到垃圾箱中,这也算把信收到了……

5 关于本文;

本文是在LinuxSir.Org 服务器资源紧张的情况下,迫不得已才采用的办法。一直以为都是架邮件服务器来解决。先后用过sendmail、qmail、postfix …… 而且邮件服务器会占用大量服务器资源,在无奈之中,才想到由第三方邮件服务器系统…… 在这之中,经历了太多的周折和痛苦…… 在2007年05月的时候,windrose兄说Gmail 的企业邮局可以申请,他就申请了一个,并把LinuxSir.Org 的邮局迁到Google上了;但服务器系统邮件没办法发送。在这次迁移服务器IDC的时候,把系统全面升级,又想到如何把邮件转发了去。于是想到了esmtp 。

本文得到花花同学的大力帮助,在此感谢!

6 参考文档;

esmtp 的官方文档,请参见: http://esmtp.sourceforge.net/
Linux用户和用户组管理文档,请参见: http://www.linuxsir.org/main/?q=node/106

7 相关文档;

re:用 esmtp 通过 Gmail 邮局进行转发系统邮件------RHEL下安装遇到的问题

在RHEL4下如何安装esmtp呢?
安装过程
#####download libesmtp和esmtp源码包
##### 1.装libesmtp
tar jxvf libesmtp-1.0.4.tar.bz2
cd libesmtp-1.0.4
./configure -prefix /usr/local/libesmtp
make
make install
##### 2.安装esmtp时有问题了
tar jxvf esmtp-0.6.0.tar.bz2
cd esmtp-0.6.0
./configure -prefix /usr/local/esmtp --with-libesmtp=/usr/local/libesmtp
.
.
.
checking libesmtp.h usability... yes
checking libesmtp.h presence... yes
checking for libesmtp.h... yes
checking for libESMTP... no
configure: error: libESMTP library not found
[root@test esmtp-0.6.0]#

libesmtp.h和libESMTP是两个不同的文件吗?那后者是有什么包安装的呢?还是当初编译libesmtp的时候要加什么参数?还是在编译esmtp的时候要加参数?一开始没有加./configure -prefix /usr/local/esmtp --with-libesmtp=/usr/local/libesmtp中的--with-libesmtp=/usr/local/libesmtp
时 checking for libesmtp.h... yes 这步都通过不了,加完后又出现了下一个错误,在google上搜libESMTP得到的全是关于libesmtp的信息

好像论坛里还有其他兄弟也遇到了这样的问题,南北老大,能帮忙看一下吗?
libESMTP这个文件如何让esmtp的安装程序认出来呢?

re:re:用 esmtp 通过 Gmail 邮局进行转发系统邮件------RHEL下安装遇到的问题

安装过程
#####download libesmtp和esmtp源码包
##### 1.装libesmtp
tar jxvf libesmtp-1.0.4.tar.bz2
cd libesmtp-1.0.4
./configure -prefix /usr/local/libesmtp
make
make install

把这个改为 ./configure ,你后面加了个/usr/local/libesmtp是画蛇添足

##### 2.安装esmtp时有问题了
tar jxvf esmtp-0.6.0.tar.bz2
cd esmtp-0.6.0
./configure -prefix /usr/local/esmtp --with-libesmtp=/usr/local/libesmtp 这句也是直接./configure

北南兄,"4.1

北南兄,"4.1 创建用户"中有个有个地方有错:
#id beinanlinux
uid=5505(beinanlinux) gid=5505(beinanlinux) groups=5505(beinanlinux)
应改为:
#id linuxsir
uid=5505(linuxsir) gid=5505(linuxsir) groups=5505(linuxsir)

谢谢,北南兄的精彩教程.
lxybhbh

谢谢~~

我会重新排版一下。

谢谢兄弟~

++++++++++++++++++++++++++++++++
自由与梦想齐飞,欢迎光临LinuxSir.Org;
开源传万世,因有我参与;

申请google的企业邮件服务遇到问题了

申请的时候,google说中国不支持此服务。请问“北南南北”是怎么申请的呀?谢谢!

遇到什么问题呢?我可以帮助你解决问题

您好,我在北南兄,这边看到你说在使用企业邮局 有遇到问题?那是遇到什么问题呢? 提出来大家分享一下,或者说,我也是可以帮助 你解决问题。我了联系方式:0591-28308054 28308062

简单~

国家选US,行业:教育
祝兄弟好运。

北南 呈上
+++++++++++++++++++++++++++++++++
自由与梦想齐飞,欢迎光临LinuxSir.Org;
开源传万世,因有我参与;

原来如此

谢谢!可惜我不是用于教育的。还是不申请了。

用邮局有什么好处?

没明白这个,直接用 linuxsir@gmail.com 发账号申请确认信有什么问题吗?

另外,有没有试验过 msmtp 呢?貌似这个开发比 esmtp 活跃些,而且有个
本地邮件队列的实现,这样可以避免客户端等待 msmtp 真正联网发信,也可以
在暂时连不上 gmail 服务器时暂存邮件,看 esmtp 主页上的 news 似乎它正在
开发这个功能。msmtp 配置 gmail 也很简单(我用的 ubuntu dapper 自带的
msmtp):

# Set default values for all following accounts.
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
timeout 30

account 126
domain 126.com
host smtp.126.com
from xxx@126.com
tls off
auth login
user xxx
password yyyyy

account gmail
domain gmail.com
host smtp.gmail.com
from xxxx@gmail.com
auth login
port 587
user xxxx@gmail.com
password yyyyy

# Set a default account
account default : gmail

在 ~/.mailrc 中写入
set sendmail="/usr/bin/msmtp"
就可以让 mail 命令使用 msmtp 发送,用 msmtp -a 126 和
msmtp -a gmail 可以选择用哪个 smtp 服务器。

msmtp 和 esmtp 的差别?

用过msmtp,但没用过 esmtp。不管怎么说谢谢兄台的好文了。看过以后觉得这2个还是有点差异啊。下面说下我的看法,可能有错的。

北南的意思好像是,想用 linuxsir@linuxsir.org 为名,对所有用户发邮件。但用户的回信将会发送至 beinan@gmail.com。这样方便管理员看系统信息和用户反馈。说穿了,就好像是把 linuxsir@linuxsir.org 作为 beinan@gmail.com 的别名。
这种说法不知对否?望指点一下。

如果真是这样的话,用 msmtp 就没办法了。msmtp 只是一个发送邮件的程序而已,不能做这个事情的。

有些邮件客户端好像直接能做这个事情。直接用别名来发,而别人回信只会回到真的地址上。比如 gmail 上收邮件时,只会看到发件人的名字,不会看到他的地址。而直接点名字的话,会跳出写信。其中收件人的后面如下所示:
Beinan < beinan@gmail.com >

我的理解不知道对不对?

用我的电子邮件域名,这不就是企业邮局么

用别人的邮局(邮件服务器),用我的电子邮件域名,这不就是企业邮局么?
只要能找到能绑定自己域名的免费邮局即可,把可以自己的站内信托管出去,
我用一个邮件客户端+向别人邮局上的帐号发信,然后让他转发, 伪装成了我自己的邮件服务器发出去的信。