• javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)


    引言:

      JavaMail 是一种可选的、能用于读取、编写和发送电子消息的包

      JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html

      JavaMail  API中包含了多种邮件传输协议 SMTP   POP(最新为pop3)  IMAP  MIME 四大类  (本章主要讲解常用的 SMTP)

      该API的几大核心类:会话(session)、消息(message)、地址(address)、验证程序(Authentication)、传输(Transport),存储和文件夹

      废话不多说,跟着例子一步步解释每个类的主要功能 —.—


     实例代码演示:

      **********************此例可直接复制粘帖至编译器进行测试哦**********************

    package com.cplatform.movie.back.test;
    import java.io.UnsupportedEncodingException;
    import java.util.Properties;
    import javax.mail.Address;
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     * javaMail API 模拟邮箱发送电子邮件
     * @author liuyt
     * @date  2014-10-24 上午10:10:51
     */
    public class EmailFunction {
        /**
         * 发送邮件的props文件 (可使用自建priperty文件)
         * 用于初始化一个session实例,配置了一个session会话的一些基本信息
         */
        private final transient Properties props = new Properties();
        
        /**
         * 邮件发送者的用户名和密码
         */
        private transient String username = "15138577682@163.com";
        private transient String password = "邮箱密码";
    
        /**
         * session为一个基本的邮件会话,通过该会话可执行其他邮件工作
         * 如:之后的初始化一个MimeMessage实例
         */
        private transient Session session;
        
        /**
         * MIME类型邮件MimeMessage类(抽象消息类Message的一个子类)
         * 可以通过将Session对象传递给MimeMessage构造器的方法来创建
         */
        private transient MimeMessage message;
        
        /**
         * 邮件内容类型 (这里演示一个html格式的消息格式)
         */
        private final static String CONTENT_TYPE_HTML = "text/html;charset=utf-8";
        
        /**
         * 端口号 
         */
        private final static int MAIL_PORT = 25;
        
        /**
         * 邮件内容
         */
        private String content = "点击进入» <a href='http://www.cnblogs.com/liuyitian'>刘一天的博客</a>";
        
         /** 
         * 继承Authenticator子类用于用户认证  (这里指邮件服务器对用户的认证)
         * 也可外部创建一个单独的邮件实体类(包涵用户名/密码即可),继承Authenticator类来重写PasswordAuthentication方法
         */  
        static class MyAuthenricator extends Authenticator{  
            private String user=null;  
            private String pass="";  
            public MyAuthenricator(String user,String pass){  
                this.user=user;  
                this.pass=pass;  
            }  
            @Override  
            protected PasswordAuthentication getPasswordAuthentication() {  
                return new PasswordAuthentication(user,pass);  
            }  
              
        }  
        
        /**
         * 初始化    session 实例方法
         * @param username 发送邮件的用户名(地址)
         * @param password 密码
         * @param smtpHostName  SMTP邮件服务器地址
         */
        private void initSession(String username, String password, String smtpHostName) {
            
            // 初始化props文件
            props.setProperty("mail.transport.protocol", "smtp");//发送邮件协议
            props.put("mail.smtp.auth", "true");        //需要验证
            props.put("mail.smtp.host", smtpHostName);    //服务器地址  
            
            // 根据property文件创建session,并传入Authenticator进行验证
            session = Session.getInstance(props, new MyAuthenricator(username, password));
            
            // 是否控制台打印消息列表 (可选)
            session.setDebug(true);
        }
        
        /**
         * 初始化邮箱message(消息实例)方法
         * @param subject    邮件主题
         * @param content    邮件内容
         * @throws MessagingException 
         * @throws AddressException 
         * @throws UnsupportedEncodingException 
         */
        private void initMessage(String subject, Object content) 
                throws AddressException, MessagingException, UnsupportedEncodingException {
            
            // 根据session创建一个消息对象
            message = new MimeMessage(session);
            
            // 设置发件人地址  (第二个参数为显示发件人名称,目前还没有测试成功)
            message.setFrom(new InternetAddress(username, "要显示的发件人名称"));
            
            // 设置邮件的主题
            message.setSubject("主题:javamail测试邮件");
            
            // 设置邮件的发送内容和内容的content-type(这里采用text/html格式)
            message.setContent(content.toString(),EmailFunction.CONTENT_TYPE_HTML);
            
            // 设置邮件的接收人地址--方法一 (选其一即可)
            // Address[] address = new Address[]{new InternetAddress("418874847@qq.com"),"...更多列表..."};
            // message.setReplyTo(addresses);
            
            // 设置邮件的接收人地址--方法二 (选其一即可)
            // 如果群发邮件,收件人较多,可另写一个方法用于专门循环遍历并设置接收人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("418874847@qq.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("12450374@qq.com"));
        }
        
        /**
         * 初始化邮件发送器方法
         * @param username  发送邮件的用户名(地址),并以此解析SMTP服务器地址
         * @param password  发送邮件的密码
         * @throws MessagingException 
         * @throws UnsupportedEncodingException 
         * @throws AddressException 
         * @return
         */
        public void SimpleMailSender(final String username, final String password) 
                throws AddressException, UnsupportedEncodingException, MessagingException {
            
            // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用 (还有IMAP和POP3)
            final String smtpHostName = "smtp." + username.split("@")[1];
            
            // 调用初始化session方法
            initSession(username, password, smtpHostName);
            
            // 调用初始化MimeMessage方法 (在初始化session完毕后)
            initMessage("邮件主题:测试邮件", content);
        }
        
        /**
         * 邮件发送
         * @throws MessagingException
         * @throws UnsupportedEncodingException
         */
        private void send() throws MessagingException, UnsupportedEncodingException {
            
            // 调用初始化邮件方法
            SimpleMailSender(username, password);
    
            // 根据session来获得一个Transport抽象类对象
            Transport tran = session.getTransport();
            
            // 打开链接 ,此时会去校验用户名和密码 (参数列表:【 邮箱服务器地址】【端口号】【 发件箱用户名】【发件箱密码】)
            tran.connect(props.getProperty("mail.smtp.host"), EmailFunction.MAIL_PORT, username, password);
            
            // 发送邮件  (第二个参数null指收件人地址,因为在初始化message时已经设置好了收件人地址,此处便省略)
            tran.sendMessage(message, null);
            
            // 关闭通道
            tran.close();
        }
        
        /**
         * main方法测试
         * @param args
         * @throws AddressException
         * @throws MessagingException
         * @throws UnsupportedEncodingException
         */ 
        public static void main(String[] args) 
                throws AddressException, MessagingException, UnsupportedEncodingException {
            //直接调用发送方法
            new EmailFunction().send();
        }
        
    }

     小结简单流程:

      根据实例代码,来总结下用javamail来发送一封简单邮件的流程
    • 下载javamail API jar包,并path到项目中去。(jar包下载地址请看本章开头)
    • 创建一个java bean,设置必要私有属性,提高代码的复用性和可读性
    • 创建内部类并继承Authenticator (验证机制)类,提供必要属性用户名和密码,重写getPasswordAuthentication方法
    • 根据java.util.property文件初始化一个邮件的Session会话实例
    • 根据步骤四得来的Session实例来初始化一个Message(消息)实例,并设置各个参数(收、发件人、主题、内容等)
    • 根据Session创建一个Transport(传输)实例 --> 打开链接(connect) -->  发送(sendMessage) -->  关闭(close

         上述流程是依据本章的实例代码来罗列的,只是让大家对流程有个简单的认识,代码本身可能并不精简,还请哆哆指正。

    javamail API 系列篇:   

    1. javamail模拟邮箱功能发送电子邮件-基础实战篇
    2. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】
    3. javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】
    4. javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】
    5. javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】

                                写作不易,难免有疏漏和错误,还请慷慨指正,觉得有帮助还请推荐哦。

      转载请注明出处http://www.cnblogs.com/liuyitian/p/4048006.html


                                                  每天多学一点点     代码少敲一点点

  • 相关阅读:
    js上传文件(图片)限制格式及大小为3M
    position:fixed部分版本的浏览器不支持
    iframe自适应高度的方法
    div左右自适应高度一致
    IE中部分版本的浏览器对Select标签设置innerHTML无效的问题
    在ie10中如何禁用输入框中的小眼睛 与 叉叉 删除按钮
    input输入框默认文字,点击消失
    调用iframe中父页面/子页面中的JavaScript方法
    iframe的一些介绍
    artDialog的一些例子与一些属性的介绍。
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4048006.html
Copyright © 2020-2023  润新知