zoukankan      html  css  js  c++  java
  • javaMail发送邮件

    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.File;
    import java.io.UnsupportedEncodingException;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * @Auther: eros
     * @Date: 2019/4/1 15:20
     * @Description:
     * 1.刚开始使用RFC882文档
     * 只能发送纯文本文件,包含邮件头和邮件体两个部分,使用空行分隔
     * 邮件头:
     * form —— 指定发件人
     * to —— 指定收件人
     * subject —— 指定邮件主题
     * cc —— 抄送,同时发送给另一个收件人,收件人可以看到邮件抄送给谁
     * bcc —— 密送,同时发送给另一个收件人,收件人无法看到邮件抄送给谁
     * 邮件体:
     * 邮件具体文本内容
     *
     * 2.MIMI协议
     * 在RFC882文档的升级和补充,通常将MIME协议描述的邮件称为MIME邮件,MIME协议描述的数据称为MIME消息。
     * 可包含图片和附件
     *
     * 3.介绍JAVAMail(基于MIME协议)
     * 3.1 使用JavaMail API 收发邮件 主要包含哪些api
     *     》创建和解析邮件内容的API —— Message类是核心,实例对象代表一封电子邮件
     *     》发送邮件API —— Transport类是发送邮件核心,实例对象代表某个邮件发送协议的邮件发送对象,例如SMTP协议
     *     》接收邮件API —— Store类是接收邮件的核心,实例对象代表某个邮件接收协议的收件接收对象,例如POP3协议
     *
     *
     * 3.2 邮件组织结构相关的API
     *      MimeMessage —— 代表整封邮件
     *      MimeMultipart —— 代表一个有多个Mime消息组合成的Mime消息
     *      MimeBodyPart —— 代表邮件中一个Mime消息
     *
     * 3.3 邮件发送程序 流程
     *      a.创建包含邮件服务器的网络连接信息的Session对象
     *      b.创建代表邮件内容的Message对象
     *      c.创建Transport对象,连接服务器,发送Message对象,关闭连接
     *
     */
    public class MailUtils {
    
        // POP3 服务器
        private final static String QQ_POP_HOST = "pop.qq.com";
        private final static String POP_163_HOST = "pop.163.com";
    
        // POP3 端口
        private final static String QQ_POP_PORT = "995";
        private final static String POP_163_PORT = "995";
    
        // SMTP 服务器
        private static String smtp_host = "";
        private final static String QQ_SMTP_HOST = "smtp.qq.com";
        private final static String SMTP_163_HOST = "smtp.163.com";
    
        // SMTP 端口
        private static String smtp_port = "";
        private final static String QQ_SMTP_PORT = "587";// 465 | 587
        private final static String SMTP_163_PORT = "465";// 465 | 994
    
        // 收件人 —— 邮箱
        private static String addressee = "";
    
        // 发件人 —— 邮箱
        private static String sender = "";
        // 账号
        private static String sender_account = "";
        // 授权码
        private static String sender_password = "";
        //邮件文本内容的类型
        private final static String MESSAGE_CONTENT_TYPE = "text/html;charset=UTF-8";
    
        //图片地址
        private static String photoUrl = "E:\avatar\background.jpg";
    
        public static void main(String[] args){
            try {
                learn();
            } catch (MessagingException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * @auther: eros
         * @param  1
         * @date: 2019/4/1 17:18
         * @description 第一次书写,熟悉发送邮件套路
         * @return: void
         */
        public static void learn() throws MessagingException, UnsupportedEncodingException {
            Properties props = new Properties();
            props.put("mail.smtp.host",QQ_SMTP_HOST);
            props.put("mail.transport.protocol","smtp");
            props.put("mail.smtp.auth","true");// 表示SMTP发送邮件需要进行身份验证
            props.put("mail.smtp.sll.enable","true");// 设置是否使用ssl安全连接
            props.put("mail.smtp.port",QQ_SMTP_PORT);
            // 使用JavaMail发送邮件的5个步骤
            //1. 创建session
            Session session = Session.getInstance(props);
            //开启session 的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
            //2.通过session得到transport对象
            Transport ts = session.getTransport();
            //3.使用邮件的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给
            //smtp服务器,都通过验证后即可正常发送邮件给收件人。
            ts.connect(QQ_SMTP_HOST,sender_account,sender_password);
            //4.创建邮件
    //        Message message = createSimpleMail(session);
    //        Message message = createImageMail(session);
    //        Message message = createAttachMail(session);
            Message message = createMixedMail(session);
            //5.发送邮件
            ts.sendMessage(message,message.getAllRecipients());
            ts.close();
        }
    
        private static Message createMixedMail(Session session) throws MessagingException, UnsupportedEncodingException {
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(sender_account));
            mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(sender_account));
            mimeMessage.setSubject("带附件和图片的邮件");
    
            // 正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一个带附件和图片的邮件<img src='cid:abc.jpg'>",MESSAGE_CONTENT_TYPE);
            // 图片
            MimeBodyPart image = new MimeBodyPart();
            image.setDataHandler(new DataHandler(new FileDataSource(photoUrl)));
            image.setContentID("abc.jpg");
            //附件
            MimeBodyPart attach = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(photoUrl));
            attach.setDataHandler(dh);
            attach.setFileName(MimeUtility.encodeText(dh.getName()));
    
            // 描述关系 正文和图片
            MimeMultipart mp1 = new MimeMultipart();
            mp1.addBodyPart(text);
            mp1.addBodyPart(image);
            mp1.setSubType("related");
    
            MimeBodyPart content = new MimeBodyPart();
            content.setContent(mp1);
            //描述关系 正文和附件
            MimeMultipart mp2 = new MimeMultipart();
            mp2.addBodyPart(content);
            mp2.addBodyPart(attach);
            mp2.setSubType("mixed");
    
            mimeMessage.setContent(mp2);
            mimeMessage.saveChanges();
            return mimeMessage;
        }
    
        /**
         * @auther: eros
         * @param session 1
         * @date: 2019/4/1 17:48
         * @description 创建一封带附件的邮件
         * @return: javax.mail.Message
         */
        private static Message createAttachMail(Session session) throws MessagingException {
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(sender_account));
            mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(sender_account));
            mimeMessage.setSubject("带附件的邮件");
    
            // 创建邮件正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封带附件的邮件",MESSAGE_CONTENT_TYPE);
    
            // 创建邮件附件
            MimeBodyPart attach = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(photoUrl));
            attach.setDataHandler(dh);
            attach.setFileName(dh.getName());
    
            //创建容器描述数据关系
            MimeMultipart mp = new MimeMultipart();
            mp.addBodyPart(text);
            mp.addBodyPart(attach);
            mp.setSubType("mixed");// ***这个是重点***
    
            mimeMessage.setContent(mp);
            mimeMessage.saveChanges();
            return mimeMessage;
        }
    
        /**
         * @auther: eros
         * @param session 1
         * @date: 2019/4/1 17:35
         * @description 创建一个邮件正文带图片的邮件
         * @return: javax.mail.Message
         */
        private static Message createImageMail(Session session) throws MessagingException {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(sender_account));
            message.setRecipient(Message.RecipientType.TO,new InternetAddress(sender_account));
            message.setSubject("带图片的邮件");
    
            // 准备邮件数据
            // 准备邮件正文数据
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件",MESSAGE_CONTENT_TYPE);
            // 准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(photoUrl));
            image.setDataHandler(dh);
            image.setContentID("xxx.jpg");
            // 描述数据关系
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
            mm.setSubType("related");
    
            message.setContent(mm);
            message.saveChanges();
            //将创建好的邮件写入到E盘以文件的形式进行保存
    //         message.writeTo(new FileOutputStream("E:\ImageMail.eml"));
            //返回创建好的邮件
            return message;
        }
    }
  • 相关阅读:
    navicat连接腾讯云服务器mysql
    腾讯云服务器部署1
    域名的注册使用
    python入门1-3章节
    轮播图的实现
    前端起步
    redis部署到云服务器上的一些坑
    面向对象第三单元总结
    面向对象课程第二单元总结
    面向对象课程第一单元总结
  • 原文地址:https://www.cnblogs.com/kongkongFabian/p/10637781.html
Copyright © 2011-2022 走看看