课程设计三

时间:2024.3.31

课程设计三:使用SMTP协议发送邮件

知识点:

1、  SMTP协议的基本内容;

2、  使用SOCKET发送SMTP命令;

3、  发送邮件的附近。

设计步骤

1、  设计窗体和组件;

2、  窗体中的事件处理;

3、  smtpMail类的实现;

实验效果为

程序功能

这个实例为一个E-mail发送程序。本程序在发送邮件时,支持邮件服务器的发送认证,同时具有发送附件的功能。

实现程序的部分代码为:

import java.io.*;

import java.net.Socket;

import java.util.*;

public class smtpMail{

    private boolean sendConf=false;

    private String User="";

    private String Password="";

    public static final int OK = 1;

    public static final int ERROR = 0;

    private static final String TEXT = "1";

    private static final String TFILE = "2";

    private static final String BFILE = "3";

    private static final String CPR = "Java 1.0";

    private static final String MIME = "Mime-Version";

    private static final String MAILER = "X-Mailer";

    private static final int BUFFER_SIZE = 48;

    private String DELIMETER;

    private String SEPARATOR;

    private static final int HOW_LONG = 6;

    private static final char SMTP_ERROR_CODE1 = 52;

    private static final char SMTP_ERROR_CODE2 = 53;

    private static final int fillchar = 61;

    private static final String cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    private Socket mailSocket;

    private BufferedReader recv;

    private PrintWriter send;

    private String from;

    private String to;

    private String domain;

    private Vector x_set;

    private Vector body;

    private Vector attach;

    public smtpMail(){

        DELIMETER = "";

        SEPARATOR = "";

        mailSocket = null;

        recv = null;

        send = null;

        from = "";

        to = "";

        domain = "";

        x_set = new Vector();

        body = new Vector();

        attach = new Vector();

        DELIMETER = getId();

        SEPARATOR = System.getProperty("file.separator");

    }

    private String getId(){

        String s = "";

        long l = System.currentTimeMillis();

        Random random = new Random();

        s = String.valueOf(l);

        for(int i = 1; i <= 6; i++)

            s = s + (int)(1.0D + 6D * random.nextDouble());

        return s;

    }

    public int open(String serverName, int port){

        try{

            mailSocket = new Socket(serverName, port);

            send = new PrintWriter(mailSocket.getOutputStream(), true);

            recv = new BufferedReader(new InputStreamReader(mailSocket.getInputStream()));

            String s1 = recv.readLine();

            char c = s1.charAt(0);

            if((c == '4') | (c == '5'))

                return 0;

        }

        catch(Exception e){

            return 0;

        }

        return 1;

    }

    private int sendString(String s){

        String s1 = "";

        try{

            send.println(s);

            s1 = recv.readLine();

        }

        catch(Exception e){

             System.out.print(s1);

            return 0;

        }

        if(s1.length() == 0)

            return 0;

        char c = s1.charAt(0);

        return !((c == '4') | (c == '5')) ? 1 : 0;

    }

    public void setSendConf(boolean blnConf){

        sendConf=blnConf;

    }

    public void setUser(String strUser){

        User = strUser;

    }

    public void setPwd(String strPwd){

        Password = strPwd;

    }

    public void setDomain(String s){

        domain = s;

    }

    public void addHeader(String s, String s1){

        x_set.addElement(s);

        x_set.addElement(s1);

    }

    public void removeHeader(String s){

        int i = x_set.indexOf(s);

        if(i >= 0){

            x_set.removeElementAt(i + 1);

            x_set.removeElementAt(i);

        }

    }

    public void clearHeaders(){

        x_set.removeAllElements();

    }

    public void setFrom(String fromAddress){

        from = fromAddress;

        x_set.addElement("From");

        x_set.addElement(fromAddress);

    }

    public void setTo(String toAddress){

        to = toAddress;

        x_set.addElement("To");

        x_set.addElement(toAddress);

    }

    public void clearData(){

        body.removeAllElements();

    }

    public void clearAttachment(){

        attach.removeAllElements();

    }

    public void addData(String s){

        body.addElement("1");

        body.addElement(s);

    }

    public void addTextFile(String s) {

        body.addElement("2");

        body.addElement(s);

    }

    public void addAttachment(String s){

        attach.addElement(s);

    }

    public int transmit(){

        boolean flag = true;

        if(domain.length() != 0){

            int i = sendString("HELO " + domain);

            if(i != 1)

                return 0;

        }

       if(sendConf){

            int i = sendString("AUTH LOGIN");

            if(i != 1)

                return 0;

             String tmp=new String(Base64.encode(User.getBytes()));

             i = sendString(tmp);

            if(i != 1)

                return 0;

             String tp=new String(Base64.encode(Password.getBytes()));

             i = sendString(tp);

            if(i != 1)

                return 0;

        }

        if(from.length() != 0){

            int j = sendString("MAIL FROM:" + from);

            if(j != 1)

                return 0;

        }

        if(to.length() != 0){

            int k = sendString("RCPT TO:" + to);

            if(k != 1)

                return 0;

        }

        if(sendString("DATA") != 1)

            return 0;

        for(int l = 0; l < x_set.size(); l += 2){

            String s = (String)x_set.elementAt(l);

            send.println(s + ": " + x_set.elementAt(l + 1));

        }

        if(x_set.indexOf("Date") < 0)

            send.println("Date: " + (new Date()).toString());

        if(x_set.indexOf("Mime-Version") < 0)

            send.println("Mime-Version: 1.0");

        send.println("X-Mailer: Java v1.0");

        if(attach.size() > 0)

            send.println("Content-Type: MULTIPART/mixed; BOUNDARY=" + DELIMETER);

        try{

            send.print("\n\n");

            int i1 = 0;

            if(attach.size() > 0){

                send.println("--" + DELIMETER);

                send.println("Content-Type: TEXT/plain;");

                send.print("\n");

            }

            for(; i1 < body.size(); i1 += 2){

                String s1 = (String)body.elementAt(i1);

                if(s1.compareTo("1") == 0)

                    send.println((String)body.elementAt(i1 + 1));

                else

                if(s1.compareTo("2") == 0)

                    sendTextFile((String)body.elementAt(i1 + 1));

            }

            for(int j1 = 0; j1 < attach.size(); j1++)

                sendBinaryFile((String)attach.elementAt(j1));

            if(attach.size() > 0)

                send.println("--" + DELIMETER + "--");

             int j= sendString("\r\n.\r\n");

            return j;

        }

        catch(Exception e){

            return 0;

        }

    }

    private void sendTextFile(String s){

        try{

            BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(new FileInputStream(s)));

            String s1;

            while((s1 = bufferedreader.readLine()) != null)

                send.println(s1);

            bufferedreader.close();

            return;

        }

        catch(Exception e){

            return;

        }

    }

    private void sendBinaryFile(String s){

        byte abyte0[] = new byte[48];

        boolean flag = true;

        String s1 = s;

        try{

            DataInputStream datainputstream = new DataInputStream(new FileInputStream(s));

            int i = s.lastIndexOf(SEPARATOR);

            if(i >= 0)

                s1 = s1.substring(i + 1);

            send.println("--" + DELIMETER);

            send.println("Content-Type: APPLICATION/octet-stream; name=\"" + s1 + "\";");

            send.println("Content-Transfer-Encoding: BASE64");

            send.println("Content-Description: " + s1);

            send.print("\n");

            while(flag){

                int j = datainputstream.available();

                int k;

                if(j >= abyte0.length){

                    k = datainputstream.read(abyte0, 0, abyte0.length);

                }

                else{

                    k = j;

                    datainputstream.readFully(abyte0, 0, k);

                    flag = false;

                }

                send.println(encode(abyte0, k));

            }

            datainputstream.close();

            return;

        }

        catch(Exception e){

            return;

        }

    }

    private static String toBinaryString(byte byte0){

        byte byte1 = byte0;

        String s = Integer.toBinaryString(byte1);

        if(byte1 < 0)

            s = s.substring(s.length() - 8);

        for(; s.length() < 8; s = "0" + s);

        return s;

    }

    public static String encode(byte abyte0[], int i){

        StringBuffer stringbuffer = new StringBuffer();

        for(int j = 0; j < i; j += 3)

            if(j + 2 < i){

                String s = toBinaryString(abyte0[j]) + toBinaryString(abyte0[j + 1]) + toBinaryString(abyte0[j + 2]);

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s.substring(0, 6), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s.substring(6, 12), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s.substring(12, 18), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s.substring(18, 24), 2)));

            }

            else

            if(j + 1 < i){

                String s1 = toBinaryString(abyte0[j]) + toBinaryString(abyte0[j + 1]) + "00";

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s1.substring(0, 6), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s1.substring(6, 12), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s1.substring(12, 18), 2)));

                stringbuffer.append(61);

            }

            else{

                String s2 = toBinaryString(abyte0[j]) + "0000";

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s2.substring(0, 6), 2)));

                stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(Integer.parseInt("00" + s2.substring(6, 12), 2)));

                stringbuffer.append(61);

                stringbuffer.append(61);

            }

        return stringbuffer.toString();

    }

    public int close(){

        int i = 0;

        try{

            i += sendString("QUIT");

            mailSocket.close();

        }

        catch(Exception e){

            return 0;

        }

        return i == 0 ? 1 : 0;

    }

}

更多相关推荐:
建筑结构课程设计设计总结

工程结构设计心得课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容;《建筑结构》从课程性质上讲是一门专业…

课程设计心得体会

心得体会通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充,在设计过程中遇到一些模糊的公式和专业用语,比如说经济刮板运输机及皮带运输的选择,在选择选择刮板皮带运输选型时,在使用手册时,有的数…

课程设计个人小结

个人小结三周的课程设计结束了,我和同学们一起度过了这段忙碌而充实的时光。这次的课程设计深刻的反映出实践是检验真理的唯一标准这句话的真谛。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作…

信息工程学院课程设计总结

通过近两周的奋斗,课程设计接近了尾声。经过两周的奋战我的课程设计终于完成了。在没有做课程设计以前觉得课程设计只是对信号与系统这门课程所学知识的单纯总结,但是通过这次做课程设计发现自己的看法有点太片面。课程设计不…

课程设计心得体会(通用)

课程设计心得体会通用通过此次课程设计使我更加扎实的掌握了有关方面的知识在设计过程中虽然遇到了一些问题但经过一次又一次的思考一遍又一遍的检查终于找出了原因所在也暴露出了前期我在这方面的知识欠缺和经验不足实践出真知...

课程设计总结模板

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合…

万能课程设计心得体会2个

1两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了…

asp net 课程设计小结

课程设计小结又过去了一周这次aspnet的课程设计中学习到了很多通过这次的课程设计检验和巩固了我平时所学的知识让我知道了平时学习中的不足教会了我如何去完整地完成简单的系统在设计的过程之中遇见问题是一定的有时候就...

数据结构课程设计总结

课程设计说明书课程名:《数据结构课程设计》题目:一元多项式运算系统20##年1月一、课程认识数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数…

课程设计心得

嵌入式系统开发课程设计题目基于6410ARM的嵌入式WEB服务器的移植院系信息工程学院专业班级11计科特色班学生姓名邵飞飞学号1142157115设计地点13号楼605指导教师王华本起止时间20xx年4月21日...

课程设计心得感想体会29篇

课程设计心得感想体会在做实验前一定要将课本上的知识吃透因为这是做实验的基础否则在老师讲解时就会听不懂这将使你在做实验时的难度加大浪费做实验的宝贵时间比如做应变片的实验你要清楚电桥的各种接法如果你不清楚在做实验时...

课程设计心得

课程设计心得篇一课程设计心得本学期实时测量技术实验以电子设计大赛的形式老师命题学生可以选择老师的题目也可以自己命题并且组队操作其他的事情包括设计总体方案硬件电路软件设计焊接调试等工作趣味性强同时也可以学到很多东...

课程设计设计总结(40篇)