⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpmail.java

📁 使用SMTP协议发送邮件,希望对开发电子邮件收发程序的人有帮助.
💻 JAVA
字号:
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;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -