热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

sendmail的配置详解

介绍性文章,简单讲了sendmail的配置,而且也没有具体的介绍sendmail情况,因为网上有关他的文章太多了.电子邮件的运行机制是由IETF出版的一组相关RFC文档定义,其中包括了SMTP、POP3、IMAP4、MIME等标准规范,涉及邮件传递、存
介绍性文章,简单讲了sendmail的配置,而且也没有具体的介绍sendmail情况,因为网上有关他的文章太多了.

电子邮件的运行机制是由IETF出版的一组相关RFC文档定义,其中包括了SMTP、POP3、IMAP4、MIME等标准规范,涉及邮件传递、存取、安全等诸多方面。其在实现中主要包括两个部分MUA和MTA,MUA提供用户管理界面,MTA负责邮件传递。

SMTP定义邮件服务器间的通信,即邮件从发送端到接收端的传递过程,端口25。

MTA就确定这个邮件要路由到哪里,以及如何路由,常见的如SENDMAIL、QMAIL、POSTFIX、EXIM等;Windows的Exchange、imail等。

MUA是邮件系统为用户提供的可读写、发送邮件界面,通常使用的有elm、pine或email等程序。

POP协议规定,用户的邮件投递到一个中间机器上,叫做POP服务器,客户机通过端口110与服务器连接。

IMAP同POP一样,提供客户机存取远程服务器中的信件的功能,但能比POP提供更高效、更强大的邮件访问功能,支持同时对多个信箱进行访问,多个用户同时访问一个信箱,支持客户机取出信件的子集,支持客户机与服务器间的同步。

下面以sendmail为例,介绍简单的邮件服务器实现过程:

Redhat9 会默认安装Sendmail,如果没有选择安装他,则要到安装光盘中找到以下文件安装:

sendmail-812.8-4.i386.rpm sendmail可执行程序

sendmail-cf-812.8-4.i386.rpm sendmail.cf生成器

sendmail-doc-812.8-4.i386.rpm sendmail.cf文档

使用rpm -ivh sendmail-8-i386.rpm进行安装

安装后就是使用了,步骤如下:

首先,激活服务service sendmail restart ,再使用netstat -ln -A inet 察看端口状态,看25端口是否开启

进入/etc/mail编辑主配置文件,修改SMTP守护进程监听ip地址为服务器ip(在264行)vi +264 sendmail.cf

# SMTP daemon options

O DaemOnPortOptions=Port=smtp,Addr=192.168.0.151, Name=MTA

# SMTP client options
#O ClientPortOptiOns=Family=inet, Address=0.0.0.0

# Modifiers to define {daemon_flags} for direct submissions
#O DirectSubmissionModifiers

# Use as mail submission program? See sendmail/SECURITY
#O UseMSP

# privacy flags
O PrivacyOptiOns=authwarnings,novrfy,noexpn,restrictqrun

编辑/etc/mail/access文件,如果没有就创建,更改如下:

localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY

192.168.0 RELAY

这里表示允许本机和192.168.0.0/24网段中的机为允许进行中继(设为RELAY),添加的纪录是根据我两台机器的ip来设的。

再将access的内容导入access.db实现对access.db的配置(因为access.db不能直接进行更改,所以使用导入的方式实现配置),命令如下:

makemap hash access.db

因为我配置了域名服务器来进行解析,所以下一步是重启域名服务有没有开启(没有建DNS的就不用了,没有建DNS因该如何做,稍后会介绍):

service named restart

nslookup mail.aaa.com //解析邮件纪录,看DNS是否工作正常

然后是建立SMTP后缀,并设置可用邮件后缀,编辑/etc/mail/local-host-names文件

# local-host-names - include all aliases for your machine here.

mail.aaa.com //建立这条纪录,因为我建的DNS中的邮件纪录为mail.aaa.com,aaa.com是我的域名。

aptech.com //这一条纪录是为后面的试验“虚拟用户”准备的

现在邮件服务器基本可以工作了。

telnet mail.aaa.com 25 //telnet到25端口,telnet 192.168.0.151 25(192.168.0.151是我设的ip)也可以。

如果连接成功,服务器会返回一个表示通信连接成功的220应答代码,如果telnet不到,就察看25端口有没有打开。

HELO mail.aaa.com //向服务器表识发件人的身份,成功,会收到250应答代码,这一步可以省略。

mail from :root@mail.aaa.com //指定发件人为root,成功就会返回250应答代码.

rcpt to :net1@mail.aaa.com //指定收件人地址为,成功就会返回250应答代码.

data //发送data命令,准备开始传输邮件内容,成功会返回354应答代码,表示准备接收邮件内容,可以在下一行开始输入邮件内容。

邮件内容写完后回车并输入“.”结束 回车后会返回250代码。

quit结束,退出。

使用mail查看文件.

(可以使用 sendmail -v aa@aa.com

如果出现 Defferd: refused by [127.0.0.1]

需要再/etc/mail/sendmail.mc 中将

DAEMON -OPTIONS('PORT=SMTP,addr=127.0.0.1,Name=MTA')中的addr=127.0.0.1删除掉

使用m4 sendmail.mc > sendmail.cf 重新生成配置文件

重启sendmail服务 service sendmail restart)

现在来介绍没有架设DNS因该如何做:

首先,在/etc/hosts里面建一条记录

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1        hsxlinux       localhost.localdomain   localhost
192.168.0.151 mail.aaa.com //192.168.0.151是sendmail服务器ip,mail.aaa.com是sendmail的域名
像上面一样,在access里添加记录,使允许中继.在导入access.db里,因为防火墙默认会阻止25端口,所以在服务器端需要开启防火墙的25端口.
客户机访问:
客户机首先要将DNS指向服务器(如果不指向,在/etc/hosts里面添加一条和上面一样的记录)
如果不出意外,就可以用telnet mail.aaa.com 25访问了,如果是DNS指向的方式就telnet 192.168.0.151 25.
设置别名:
首先,编辑/etc/aliases,在最后面添加如下记录:
# trap decode to catch security attacks
decode:         root
# Person who should get root's mail
#root:          marc
administrator :root  //设置root的别名为administrtor,冒号左边的为别名,右边的为当前系统用户.
user :net1
guest :nobody
使用命令newliases生成新的别名信息库
这样就可以了,当发往别名邮箱时,也就是发往root用户的邮箱中.
进入/etc/aliases添加一条记录如下:
# trap decode to catch security attacks
decode:         root
# Person who should get root's mail
#root:          marc
administrator :root user :net1 guest :nobody
mailgrp : root net1 net2 //定义一个邮件组,将root、net1、net2三个用户加入这个组,当向组发送邮件时,也会向组中的用户发送邮件.
虚拟邮件帐号:
当网络中存在多个域,而在另一个域中又不想再建立同样的用户时,可以使用sendmail的虚拟邮件帐户功能.我在
首先,编辑local-host-names添加另一个域的域名aptech.com,编辑virtusertable,打开后文件中没有内容,我添加了如下内容:
net@aptech.com   root   //让root帐号对应aptech.com域中的net帐户.
net1@aptech.com  net1
将配置写入数据库:
makemap hash virtusertable.db
然后,在测试一下,如果不出意外,是可以成功的.
设置mail验证:
首先,检查组件cyrus-sasl-2.1.10-4有没有安装,如果没有就先安装,再用命令sendmail -d0.1 -bv检验是否支持安全验证.
编辑/etc/mail/sendmail.mc,在43行44行找到如下内容:
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
将前面代表注释的"dnl"去掉:
dnl #
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
再找到第92行,同样将前边的注释去掉:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for dnl # mail from MUAs that authenticate. Roaming users who can't reach their dnl # preferred sendmail daemon due to port 25 being blocked or redirected find dnl # this useful.
dnl #
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
将修改导入sendmail.cf,因为sendmail.cf才是真正的配置文件:
m4 sendmail.mc >sendmail.cf
service sendmail restart重启sendmail服务,这个时候,一般会出错,说sendmail.cf 39行出错,vi sendmail.cf干脆删掉39行,因为也没用,就可以了.
service sendmail restart重启服务,然后telnet会出错,Cnection refused,这是因为sendmail 的264行中ip被覆盖了,编辑sendmail.mc,将264行的ip改回来,并使用
命令:m4 sendmail.mc >sendmail.cf,然后重启sendmail服务.
然后,当你使用linux中的客户端软件Evolution发送邮件,就会需要进行SMTP验证.
linux实现POP3和IMAP:
首先,检查IMAP组件有没有安装,安装后就进行如下步骤:
cd /etc/xinetd.d进入xinetd.d目录,编辑ipop3文件
# default: off
# description: The POP3 service allows remote users to access their mail
#              using an POP3 client such as Netscape Communicator, mutt,
#              or fetchmail.
service pop3
{
disable   = yes
socket_type             = stream
wait                    = no
user                    = root
server                  = /usr/sbin/ipop3d
log_on_success  += HOST DURATION
log_on_failure  += HOST
}
 其中有一行"disable = yes",将yes改为no,开启pop3功能(同样的,可以通过编辑imap文件,做同样修改,也可以开启imap功能).
然后,重启xinetd服务,就可以通过pop3来接收邮件了,可以通过linux中的客户端软件Evolution,或windows中的outlook进行测试.

推荐阅读
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文详细介绍了如何在不同操作系统和设备上设置和配置网络连接的IP地址,涵盖静态和动态IP地址的设置方法。同时,提供了关于路由器和机顶盒等设备的IP配置指南。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
author-avatar
一直很哇塞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有