JavaWeb 之邮件发送

1. 邮件协议概述

  • SMTP(Simple Mail Transfer Protocol, 简单邮件传输协议) 发邮件协议;
  • POP3(Post Office Protocol Version 3, 邮局协议第3版) 收邮件协议;
  • IMAP(Internet Message Access Protocol, 因特网消息访问协议)收发邮件协议;

2. 邮件服务器名称

  • SMTP 服务器的端口号为 25,服务器名称为 smtp.xxx.xxx;
  • POP3 服务器的端口号为 110,服务器名称为 pop3.xxx.xxx;

3. JavaMail 发邮件

3.1 导包

  • mail.jar;
  • activition.jar;
  • J2EE javax.mail 包

3.2 核心类

  1. Session

    • 如果得到了它,表示已经与服务器连接上了, 与 Connection 的作用相似.
  2. MimeMessage

    • 它表示一个邮件对象,可以调用它的 setXxx()方法,设置发件人,发件人,主题以及正文等;
  3. TransPort

    • 发邮件;

// 得到 Session, 需要使用 Session.getInstance(Properties, Authenticator);
    Properties props = new Properties();
    props.setProperty("mail.host","smtp.163.com"); //设置服务器主机名
    props.setProperty("mail.smtp.auth","true"); //设置是否需要验证

    Authenticator auth = new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication(){
                return new PasswordAuthentication("用户名","密码");
            }
    };

    // 得到 session 对象
    Session session = Session.getInstance(props,auth);
    try{
        // 创建 MimeMessage
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddess("用户名@163.com")); // 设置发件人
        msg.setRecipients(RecipientType.TO, "收件人@126.com"); // 设置收件人
        msg.setRecipients(RecipientType.CC, "收件人@sohu.com"); // 设置抄送
        msg.setRecipients(RecipientType.BCC, "收件人@sina.com"); // 设置暗送

        msg.setSubject("这是一封测试邮件"); // 设置标题

        // 第一种方式: 普通邮件
        msg.setContent("下雨天","text/html;charset=utf-8"); //邮件内容

        // 第二种方式: 带有附件的邮件
        /*
         * 当发送包含附件的邮件时, 邮件体为多部件形式!
         *  1. 创建一个多部件的部件内容! MimeMultipart
         *  MimeMultipart 就是一个集合, 用来装载多个主体部件!
         *  2. 我们需要创建两个主体部件, 一个是文本内容的, 另一个是附件;
         *     主体部件叫 MimeBodyPart
         *  3. 把 MimeMultipart 设置给 MimeMessage 的内容!!
         */

         MimeMultipart list = new MimeMultipart(); // 创建多部分内容

         // 创建 MimeBodyPart
         MimeBodyPart part2 = new MimeBodyPart();
         // 设置主体部件的内容
         part2.setContent("这是测试邮件","text/html;charset=utf-8");
         // 把主体部件添加到集合中
         list.addBodyPart(part2);

         // 创建第二个 MimeBodyPart
         MimeBodyPart part3 = new MimeBodyPart();
         // 设置主体部件的内容
         part3.attachFile(new File("c:/浮夸.mp3"));
         // 设置显示的文件名称, 其中 encodeText 用来处理中文乱码问题
         part3.setFilename(MimeUtility.encodeText("浮夸.avi"));
         // 把主体部件添加到集合中
         list.addBodyPart(part3);

         // 把多部件设置给邮件作为邮件的内容
         msg.setContent(list);

        // 发送
        Transport.send(msg);
    }catch(MessagingException e){
        throw new RuntimeException(e);
    }


    // 使用 MailUtils 工具发送邮件
    public void fun2() throws Exception{

        // 1. 得到 Session 对象
        Session session = MailUtils.createSession("smtp.163.com","用户名","密码");

        // 2. 创建 Mail 对象
        Mail mail = new Mail("发件地址","收件地址","邮件主题","邮件内容");

        // 3. 创建附件对象
        AttachBean ab = new AttachBean(new File("C:/浮夸.avi"),"浮夸.avi");

        // 添加到 mail 中
        mail.addAttach(ab);

        // 发送
        MailUtils.send(session,mail);
    }

参考资料:

原文地址:https://www.cnblogs.com/linkworld/p/7637134.html