当前位置: 澳门新濠3559 > 服务器运维 > 正文

服务器就是遵循 SMTP 协议的发送邮件服务器,3、

时间:2019-11-22 14:55来源:服务器运维
随着企业用户使用邮箱时间的增长,遭遇垃圾邮件的问题会越来越多,不仅每天将要花费宝贵的时间处理垃圾邮件,同时垃圾邮件还会吞食大量企业邮箱空间,并占用大量的网络带宽,

随着企业用户使用邮箱时间的增长,遭遇垃圾邮件的问题会越来越多,不仅每天将要花费宝贵的时间处理垃圾邮件,同时垃圾邮件还会吞食大量企业邮箱空间,并占用大量的网络带宽,甚至还会造成网络拥堵,导致服务器瘫痪。因此企业在设计邮件服务器的时候,一个重要的环节就是屏蔽垃圾邮件,目前有哪些主流防范技术可以还原干净稳定的邮件系统呢?目前防治垃圾邮件的方式主要有三类:1、IP 域名类型的方式;2、 内容过滤类型的方式;3、 SMTP 技术性规范的方式。

SMTP,POP3,IMAP

POP3

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 
  SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 
  增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

SMTP协议原理
SMTP-简单邮件传输协议(Simple Mail Transfer Protocol),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。SMPT协议规定的命令是以明文方式进行的。为了 说明SMTP的工作原理,我们以向www.linuxaid.com.cn发送邮件为实例进行说明。

图片 1

网易常见邮箱服务器信息:

图片 2

在linux环境下,使用"telnet www.linuxaid.com.cn 25"连接www.linuxaid.com.cn的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为 www.linuxaid.com.cn,而端口号指定为25,然后连接www.linuxaid.com.cn:交互过程如下:

今天我们就来谈谈一般人比较不熟悉的SMTP。SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。所谓“SMTP 技术性规范的方式”就是通过一些 ESMTP (扩展SMTP 协议)进行验证,访问指定的目的地址,以此过滤垃圾邮件。

腾讯邮箱服务器信息:stmp.qq.com

服务器就是遵循 SMTP 协议的发送邮件服务器,3、 SMTP 技术性规范的方式。Action

public class MailAction extends ActionSupport {

    private SysuserinfoService sysuserinfoService;// 用户基本信息表

    private String email;
    private String errorMessage;
    private Sysuserinfo sysuserinfo;

    /**
     * 发邮件
     * 
     * @return
     */
    public String sendMail() {
        System.out.println("LOG : MailAction-sendMail");

        if (sysuserinfo == null) {
            errorMessage = "获取用户信息失败,请返回登录界面重新尝试 !";
            return "error";
        }

        String userId = sysuserinfo.getUserCode();
        String userRole = sysuserinfo.getSysrole().getRoleCode();
        Sysuserinfo userinfo = sysuserinfoService.findById(Sysuserinfo.class,
                userId);

        if (userinfo == null) {
            errorMessage = "用户不存在,请返回登录界面重新尝试 !";
            return "error";
        }

        // 设置邮件内容 String content = "尊敬的用户:" + userinfo.getUserName() +
        String content = ".作业在线系统找回密码给你发的密码是:" + userinfo.getPassword()
                + "请注意自己的帐号安全,不要外泄密码!!";

        boolean flag = false;

        email = userinfo.getEmail();// 从数据库读出

        if (email == null) {
            errorMessage = "对不起,您还没有设置邮箱哦!";
            return "error";
        }
        System.out.println("LOG : email = " + email);

        flag = sendEmail(email, content);

        if (!flag) {
            errorMessage = "邮件发送过程中找不到家了!";
            return "error";
        }
        return "success";
    }

    /**
     * 账户:cn_edu_nwsuaf_mas@163.com 密码:cn.edu.nwsuaf 授权密码:cnedunwsuaf2017
     * 
     * @param email
     * @param content
     * @return
     */
    public boolean sendEmail(String email, String content) {
        SimpleEmail mailUtil = new SimpleEmail();

        /**
         * 根据发送方设置服务器
         * 
         */
        mailUtil.setHostName("smtp.163.com");
        if (mailUtil.getHostName() == null) {
            System.out.println("LOG : can not deal with the type of email!");
            return false;
        }
        mailUtil.setAuthentication("xxxxxxxx@163.com",
                "xxxxxxxx@163.com的授权码");
        mailUtil.setCharset("utf-8");
        try {
            mailUtil.addTo(email);
            mailUtil.setFrom("xxxxxxxx@163.com");
            mailUtil.setSubject("subject");
            mailUtil.setMsg(content);
            mailUtil.send();
        } catch (EmailException e) {
            System.out.println("LOG : 邮件发送过程中找不到家了!");
            e.printStackTrace();
            return false;
        }
        return true;
    }

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="mail" extends="commons">
        <action name="mailSendMail" method="sendMail"
            class="cn.edu.nwsuaf.comAction.MailAction">
            <result name="success">/page/mail/success.jsp</result>
            <result name="error">/page/mail/error.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
</struts>    

 

[lix@ns lix]$ telnet www.linuxaid.com.cn 25
Trying 202.99.11.120...
Connected to www.linuxaid.com.cn.
Escape character is ^].

接下来来推荐5种通过SMTP方式防御垃圾邮件的做法:

HELO ideal
220 www.linuxaid.com.cn ESMTP Sendmail
8.10.2/8.10.2; Mon, 18 Sep 2000 13:40:44
+0800
250 www.linuxaid.com.cn Hello
[210.12.114.130], pleased to meet you

- Grey-Listing:即灰名单,此种技巧乃是利用 SMTP 协议中规定碰上收件端服务器暂时无法服务时,寄件端有义务隔一段时间后再重寄的规定,而垃圾信邮件群发软件通常不会重寄。此种手法有缺点,造成收信端会延迟收到信件。

MAIL FROM:ideal@btamail.net.cn
250 2.1.0 IDEAL@btamail.net.cn... Sender ok

- SMTP Banner 信息片断化:此种技巧是故意将 Banner 信息分段送出,会造成设计不良的 SMTP 发信程序无法判断 Banner 信息导致无法寄信。国外某名牌邮件服务器采用此种手法。

RCPT TO:ideal@linuxaid.com.cn
250 2.1.5 ideal@linuxaid.com.cn... Recipient ok

- SMTP Banner 信息延迟:SMTP 协议中规定等待 Banner 时间最长可高达 15 分钟,许多垃圾邮件群发软件等不耐烦了就会放弃寄送。

DATA
354 Enter mail, end with "." on a line by itself
hello , Pls to get to meet u :) good luck
.
250 2.0.0 e8I5j1M11204 Message accepted for delivery

- SMTP EHLO/HELO 回应检查:此种技巧是利用 SMTP 协议中对于 EHLO 命令内的主机域名必须能解析到寄件主机的规定进行检查,许多邮件群发软件无法对自己的域名做出正确的判断,这种时候就无法寄送垃圾邮件进去。

QUIT
221 2.0.0 www.linuxaid.com.cn closing connection
Connection closed by foreign host.

- SMTP 指令顺序限制:SMTP 协议中规定服务器端要发出 Banner 之后,寄件端才能发出 EHLO,许多邮件服务器就故意延后送出 SMTP Banner,但许多垃圾邮件寄件软件并不等待 Banner 就直接送出 EHLO,此种手法也造成被判为垃圾信的一种依据。

其中顶格部分是输入的命令,其他内容是对方邮件服务器输出的状态信息。

...

这里,HELO是客户向对方邮件服务器发出的标识自己的身份的命令,这里假设发送者为ideal;MAIL FROM命令用来表示发送者的邮件地址;RCPT TO:标识接收者的邮件地址,这里表示希望发送邮件给ideal@linuxaid.com.cn,如果邮件接收者不是本地用户,例如RCPT TO:ideal@btamail.net.cn,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服 务器是OPEN RELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识; QUIT表示退出这次会话,结束邮件发送。

这就是一个简单的发送邮件的会话过程,其实当使用outlook express等客户软件发送时,后台进行的交互也是这样的,当然,SMTP协议为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC821来获得。

当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通过SMTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本 地邮件服务器是Linux系统),若你通过telnet协议直接登录到邮件服务器上,则可以使用mail等客户软件直接阅读邮件,但是若你希望使用本地的 MUA(Mail User Agent,如outlook express等客户软件)来阅读邮件,则本地客户端通过POP3或IMAP协议与邮件服务器交互,将邮件信息传递到客户端(如:win98系统)。而如 果你向你的朋友回复一封信件时,你所使用的MUA也是通过SMTP协议与邮件服务(一般为发送邮件地址对应的email地址)器通信,指示其希望邮件服务 器帮助转发一封邮件到你朋友的邮件地址指定的邮件服务器中。若本地邮件服务器允许你通过它转发邮件,则服务器通过SMTP协议发送邮件到对方的邮件服务 器。这就是接受和发送邮件的全部过程。

什么是mail Relay
邮件服务器一般具有一个或若干个域名(这些域名应该出现在某个配置文件内),邮件服务器在运行时将监听25号端口,等待远程的发送邮件的请求。网络上 其他的mail服务器或者请求发送邮件的MUA(Mail User Agent,如outlook express、foxmail等等)会连接邮件服务器的25号端口,请求发送邮件,SMTP会话过程一般是从远程标识自己的身份开始,过程如下:

HELO remote.system.domainname
250 qmailserver.domain

MAIL FROM:user@somewherer.net
250 OK

RCPT TO: user1@elsewhere.net
邮件的接收者user1@elsewhere.net中的域名并不一定是邮件接受服务器的所具有的本地域名,也就是说邮件目的可能不是上面协议交互中的接收方,而是邮件发送者希望接收邮件服务器帮助其转发邮件。这时候本地系统可能有两种回答,接受它:

250 OK

或者拒绝接受它:

553 sorry,.that domain isnot in my domain list of allowed recphosts

第一种情况下,本地邮件服务器是允许relay的,它接收并同意传递一个目的地址不是本地的邮件;而第二种情况则不接收非本地邮件。

为什么不能配置邮件服务器为open relay?

如果系统管理员将自己的邮件服务器设置为open relay,将会导致一些垃圾邮件发送者将你的邮件服务器作为转发自圾邮件的中继站,这将使垃圾邮件的接收者将矛头对准你,可能会导致报复性的邮件炸弹; 垃圾邮件还能消耗你大量的资源,占用你的带宽。更为糟糕的事情可能是你的名字可能会上了黑名单,成为其他邮件接收者共同抵制的目标,你的邮件将被这些接收 者所拒绝。

因此,系统管理员应当注意不要使自己的邮件服务器是open relay的。

                                                                                                            轉自:

编辑:服务器运维 本文来源:服务器就是遵循 SMTP 协议的发送邮件服务器,3、

关键词: