zoukankan      html  css  js  c++  java
  • 一个给邮箱发送消息简单的例子 程序员

    第一步:首先写一个类,就是将整个发送邮件所需要的所有内容给封装起来的一个类!

    package model;
    
    public class MailMessage {
        // 发件人邮箱
        private String from;
        // 收件人邮箱
        private String to;
        // 发件人,在邮件中显示邮箱
        private String datafrom;
        // 收件人,在邮件中显示邮箱
        private String datato;
        // 主题
        private String subject;
        // 内容
        private String content;
        // 日期
        private String date;
        // 发送邮箱用户名,邮箱名的前缀
        private String user;
        // 发送邮箱密码
        private String password;
    
        public String getFrom() {
            return from;
        }
    
        public void setFrom(String from) {
            this.from = from;
        }
    
        public String getTo() {
            return to;
        }
    
        public void setTo(String to) {
            this.to = to;
        }
    
        public String getDatafrom() {
            return datafrom;
        }
    
        public void setDatafrom(String datafrom) {
            this.datafrom = datafrom;
        }
    
        public String getDatato() {
            return datato;
        }
    
        public void setDatato(String datato) {
            this.datato = datato;
        }
    
        public String getSubject() {
            return subject;
        }
    
        public void setSubject(String subject) {
            this.subject = subject;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
    
        public String getUser() {
            return user;
        }
    
        public void setUser(String user) {
            this.user = user;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    

      第二步,写一个接口,是发送邮件所需要的所有的方法,及构造!

    package dao;
    
    import java.io.IOException;
    
    public interface SendMail {
    	 /**
         * 向服务器发送命令
         * 
         * @param order
         *            向服务器发送的命令行
         * @return 返回服务器状态
         * */
        public int sendToServer(String order);
    
        /**
         * 解析服务器返回的应答信息
         * 
         * @return 返回服务器状态
         * */
        public int getResult();
    
        /** 与服务器发起会话 */
        public void regist() throws IOException;
    
        /** 登录到服务器 */
        public void login() throws IOException;
    
        /** 设置邮件源地址 */
        public void setMailFrom() throws IOException;
    
        /** 设置邮件目的地址 */
        public void setMailTo() throws IOException;
    
        /** 设置邮件内容 */
        public void setData() throws IOException;
    
        /** 退出邮箱服务 */
        public void quit() throws IOException;
    
        /** 发送邮件的主程序 */
        public boolean sendMail() throws IOException;
    
    }
    

      第三部,最重要的一步,实现上面的借口(interface)

    package dao;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.StringTokenizer;
    
    import sun.misc.BASE64Encoder;
    
    import model.MailMessage;
    
    public class SendMailImp implements SendMail {
    
    	public static final int SINA = 0;
        public static final int QQ = 1;
        public static final int FOXMAIL = 2;
        public static final int WANGYI163 = 3;
        public static final int WANGYI126 = 8;
        public static final int YEAH = 4;
        public static final int HOTMAIL = 5;
        public static final int YAHOO = 6;
        public static final int GMAIL = 7;
    
        /** 用于向服务器发起连接 */
        private Socket socket = null;
        /** 与服务器连接后的输入流 */
        private BufferedReader input = null;
        /** 与服务器连接后的输出流 */
        private BufferedWriter output = null;
        /** 发送邮件服务器名称 */
        private String server = null;
        /** 发送端口号 */
        private int port;
        /** 邮件信息 */
        private MailMessage message;
    
        public MailMessage getMessage() {
            return message;
        }
        
        //设置邮件的信息内容,以方法链的方式实现
        public SendMailImp setMessage(MailMessage message) {
            this.message = message;
            return this;
        }
    
        public Socket getSocket() {
            return socket;
        }
    
        public void setSocket(Socket socket) {
            this.socket = socket;
        }
    
        public BufferedReader getInput() {
            return input;
        }
    
        public void setInput(BufferedReader input) {
            this.input = input;
        }
    
        public BufferedWriter getOutput() {
            return output;
        }
    
        public void setOutput(BufferedWriter output) {
            this.output = output;
        }
    
        public String getServer() {
            return server;
        }
    
        public void setServer(String server) {
            this.server = server;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    
        /**
         * 根据邮箱类型,设置发送邮件服务器和端口号
         */
        public static SendMailImp getInstance(int sendMailType) {
            SendMailImp sendMailImp = new SendMailImp();
            switch (sendMailType) {
            case SINA:
                sendMailImp.setServer("smtp.sina.com");
                sendMailImp.setPort(25);
                break;
            case QQ:
            case FOXMAIL:
                sendMailImp.setServer("smtp.qq.com");
                sendMailImp.setPort(25);
                break;
            case WANGYI126:
                sendMailImp.setServer("smtp.126.com");
                sendMailImp.setPort(25);
                break;
            case WANGYI163:
                sendMailImp.setServer("smtp.163.com");
                sendMailImp.setPort(25);
                break;
            case YEAH:
                sendMailImp.setServer("smtp.yeah.net");
                sendMailImp.setPort(25);
                break;
            case YAHOO:
                sendMailImp.setServer("smtp.mail.yahoo.com");
                sendMailImp.setPort(465);
                break;
            case GMAIL:
                sendMailImp.setServer("smtp.gmail.com");
                sendMailImp.setPort(465);
                break;
            case HOTMAIL:
                sendMailImp.setServer("smtp.live.com");
                sendMailImp.setPort(25);
                break;
            default:
                break;
            }
    
            try {
                // 与发送邮件服务器建立Socket连接,并得到输入输出流
                Socket socket = new Socket(sendMailImp.getServer(), sendMailImp
                        .getPort());
                BufferedReader input = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));
                BufferedWriter output = new BufferedWriter(new OutputStreamWriter(
                        socket.getOutputStream()));
    
                sendMailImp.setSocket(socket);
                sendMailImp.setInput(input);
                sendMailImp.setOutput(output);
            }
            catch (UnknownHostException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
    
            return sendMailImp;
        }
    
        public int sendToServer(String order) {
            try {
                this.getOutput().write(order);
                this.getOutput().newLine();
                this.getOutput().flush();
    
                System.out.println("已发送命令:" + order);
            }
            catch (IOException e) {
                e.printStackTrace();
            }
    
            return getResult();
        }
    
        public int getResult() {
            String line = "";
            try {
                line = this.getInput().readLine();
                System.out.println("服务器返回状态:" + line);
            }
            catch (IOException e) {
                e.printStackTrace();
            }
    
            // 从服务器返回消息中取得状态码,并转换成整数返回
            StringTokenizer get = new StringTokenizer(line, " ");
            return Integer.parseInt(get.nextToken());
        }
    
        public void regist() throws IOException {
            int result = getResult();
            // 连接上服务器后,服务器给出220应答
            if (result != 220)
                throw new IOException("连接服务器失败");
    
            result = sendToServer("HELO " + this.getServer());
            // HELO命令成功后,服务器返回250应答
            if (result != 250)
                throw new IOException("注册邮件服务器失败");
        }
    
        public void login() throws IOException {
            BASE64Encoder encode = new BASE64Encoder();
    
            int result = sendToServer("AUTH LOGIN");
            // 登陆服务成功,服务器返回334应答
            if (result != 334)
                throw new IOException("登陆服务失败");
    
            // 对邮箱用户名进行验证
            result = sendToServer(encode.encode(this.message.getUser().getBytes()));
            if (result != 334)
                throw new IOException("用户名错误");
    
            // 对邮箱密码进行验证
            result = sendToServer(encode.encode(message.getPassword().getBytes()));
            if (result != 235)
                throw new IOException("用户验证错误");
        }
    
        public void setMailFrom() throws IOException {
            int result = sendToServer("MAIL FROM:<" + this.getMessage().getFrom()
                    + ">");
            if (result != 250)
                throw new IOException("邮件源地址错误");
        }
    
        public void setMailTo() throws IOException {
            int result = sendToServer("RCPT TO:<" + this.getMessage().getTo() + ">");
            if (result != 250)
                throw new IOException("邮件目的地址错误");
        }
    
        public void setData() throws IOException {
            int result = sendToServer("DATA");
            // 输入date回车后,若收到354应答后,继续输入邮件内容
            if (result != 354)
                throw new IOException("不能发送数据");
    
            this.getOutput().write("FROM:" + this.getMessage().getDatafrom());
            this.getOutput().newLine();
            this.getOutput().write("TO:" + this.getMessage().getDatato());
            this.getOutput().newLine();
            this.getOutput().write("SUBJECT:" + this.getMessage().getSubject());
            this.getOutput().newLine();
            this.getOutput().newLine();
            this.getOutput().write(this.getMessage().getContent());
            this.getOutput().newLine();
    
            // 句点加回车结束邮件内容输入
            result = sendToServer(".");
            if (result != 250)
                throw new IOException("发送数据错误");
        }
    
        public void quit() throws IOException {
            int result = sendToServer("QUIT");
            if (result != 221)
                throw new IOException("未能正确退出");
    
            this.getInput().close();
            this.getOutput().close();
        }
    
        public boolean sendMail() {
            boolean success = true;
            try {
                // 注册到发送邮件服务器
                regist();
                // 登陆到服务器
                login();
                // 设置邮件源地址
                setMailFrom();
                // 设置邮件目的地址
                setMailTo();
                // 设置邮件体
                setData();
                // 退出邮件
                quit();
            }
            catch (Exception e) {
                e.printStackTrace();
                success = false;
            }
            return success;
        }
    
    }
    

      第四步,我在这里是写了一个测试方法,当然我们最后是将这个发放写在jsp页面上面的。在这里只是测试了一下!

    package action;
    
    import java.io.IOException;
    
    import model.MailMessage;
    
    import dao.SendMail;
    import dao.SendMailImp;
    
    public class Test {
    	 public static void main(String[] args) {
    	        MailMessage message = new MailMessage();
    	        message.setFrom("yhtyhj@163.com");
    	        message.setTo("531601015@qq.com");
    	        message.setSubject("这个是一个邮件发送测试");
    	        message.setUser("yhtyhj@163.com");
    	        message.setContent("Hello,this is a mail send test\n你好这是一个邮件发送测试");
    	        message.setDatafrom("yhtyhj@163.com");
    	        message.setDatato("531601015@qq.com");
    	        message.setPassword("sallon198918");
    	        
    	        SendMail send = SendMailImp.getInstance(SendMailImp.WANGYI163).setMessage(message);
    	        try {
    	            send.sendMail();
    	        }
    	        catch (IOException e) {
    	            e.printStackTrace();
    	        }
    	    }
    }
    

      

  • 相关阅读:
    模仿企业在宣传中的动画效果页面
    模仿头条导航的左右滚动效果
    Ubuntu 1210怎么获得root权限登录
    Linux嵌入式 -- 内核简介(x86)
    linux ioctl()函数
    BUTTON标签和INPUT标签的区别【转】
    如何删除列表中的空格
    python第一模块数据类型
    python第一模块基础语法
    最短路 dijkstra+优先队列+邻接表
  • 原文地址:https://www.cnblogs.com/sallon/p/2667641.html
Copyright © 2011-2022 走看看