1. 下载依赖包

方法一:

  • JavaMail
    • https://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar
  • Activation Framework
    • https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar

方法二:

  • Maven
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

2. 简单邮件

(没有图片和附件,纯文本邮件)

  • 要发送邮件,需要获得协议和支持, 开启SMTP/POP3服务(以QQ邮箱为例)

    • 在QQ邮箱 ➡ 设置 ➡ 账户 : 开启SMTP/POP3服务
      在这里插入图片描述

    • 开启后即可得到一串授权码
      在这里插入图片描述

//发送一封简单邮件
public class EmailTest01 {
    public static void main(String[] args) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.com");     //设置QQ邮件服务器
        prop.setProperty("mail.transport.protocol","smtp");  //邮件发送协议
        prop.setProperty("mail.smtp.auth","true");      //需要验证用户名密码

        //QQ邮箱还需要设置 SSL加密, 加入以下代码即可(其他邮箱可以省略)
        MailSSLSocketFactory mailSSLSocketFactory = new MailSSLSocketFactory();
        mailSSLSocketFactory.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",mailSSLSocketFactory);

        //使用java 发送邮件的5个步骤
        //1. 创建定义整个应用程序所需的环境信息的Session对象
        // QQ邮箱才有, 其他邮箱不需要
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //发送人的 邮箱地址、授权码
                return new PasswordAuthentication("xxxxx@qq.com","授权码");
            }
        });

        //开启session的debug模式, 这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2. 通过session得到transport对象
        Transport transport = session.getTransport();

        //3. 使用邮箱的用户名和授权码连上邮件服务器
        transport.connect("smtp.qq.com","xxxxx@qq.com","授权码");

        //4. 创建邮件:  写邮件
        //注意需要传递session
        MimeMessage mimeMessage = new MimeMessage(session);

        //邮件发件人
        mimeMessage.setFrom(new InternetAddress("xxxxx@qq.com"));

        //邮件收件人 (可以发给自己)
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxxx@xxx.com"));

        //邮件标题
        mimeMessage.setSubject("Java Email Test");

        //邮件内容,类型
        mimeMessage.setContent("Java email test!","text/html;charset=utf-8");

        //5. 发送邮件
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

        //关闭连接
        transport.close();
    }
}

3.复杂邮件

  • 有图片和附件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q1BBv9l1-1627308986583)(Java 发送邮件.assets/1627284424427.png)]

  1. Java发送带图片的邮件

    • 带图片的邮件只在内容上和普通邮件有区别,将第四步的代码换做以下即可
    
    //4. 创建邮件:  写邮件
            //注意需要传递session
            MimeMessage mimeMessage = new MimeMessage(session);
    
            //邮件发件人
            mimeMessage.setFrom(new InternetAddress("xxxxxxx@qq.com"));
    
            //邮件收件人
            mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxxx@xxx.com"));
    
            //邮件标题
            mimeMessage.setSubject("一个带图片的邮件测试");
    
            //------------------图片邮件与普通文字邮件的区别只在内容上------------------
            //邮件内容
            //准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dataHandler = new DataHandler(new FileDataSource("F:\\study\\java\\javaWeb\\fileUp\\email-java\\src\\img.png"));
            image.setDataHandler(dataHandler);  //在body中放入这个处理的图片数据
            image.setContentID("1.jpg");     //给图片设置一个id,在后面使用
    
            //正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封有图片的邮件: <img src='cid:1.jpg'/>","text/html;charset=utf-8");
    
            //描述数据关系, 将数据放入一个块中
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
    
            mm.setSubType("related");  //alternative / related / mixed
    
            //设置到消息中
            mimeMessage.setContent(mm);
            mimeMessage.saveChanges();  //保存
    
          //------------------------------------------------------------------------
    
  2. 带文本和图片和附件的邮件

    	// 调用封装的方法
    	//4. 创建邮件:  写邮件  封装到一个方法中
        MimeMessage mimeMessage = imageMail(session);
    
    public static MimeMessage imageMail(Session session) throws Exception {
            //注意需要传递session
            MimeMessage mimeMessage = new MimeMessage(session);
    
            //邮件发送人
            mimeMessage.setFrom(new InternetAddress("xxxxxxx@qq.com"));
    
            //邮件收件人,可以自己给自己发
            mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxxxx@xxx.com"));
    
            //邮件标题
            mimeMessage.setSubject("邮件测试");
    
            //--------------图片邮件与普通文字邮件的区别只在内容上--------------------------
            //邮件内容
            //准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dataHandler = new DataHandler(new FileDataSource("F:\\study\\java\\javaWeb\\fileUp\\email-java\\src\\img.png"));
            image.setDataHandler(dataHandler);  //在body中放入这个处理的图片数据
            image.setContentID("1.jpg");     //给图片设置一个id,在后面使用
    
            //正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent("这是一封复杂邮件: <img src='cid:1.jpg'/>","text/html;charset=utf-8");
    
            //附件
            MimeBodyPart file = new MimeBodyPart();
            file.setDataHandler(new DataHandler(new FileDataSource("F:\\study\\java\\javaWeb\\fileUp\\email-java\\src\\hello.txt")));
            file.setFileName("1.txt");
    
            MimeBodyPart file2 = new MimeBodyPart();
            file2.setDataHandler(new DataHandler(new FileDataSource("F:\\study\\java\\javaWeb\\fileUp\\email-java\\src\\db.properties")));
            file2.setFileName("1.properties");  //设置文件
    
            //描述数据关系, 将数据放入一个对象中
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text);
            mm.addBodyPart(image);
            mm.setSubType("related");  //alternative  / related / mixed
    
            MimeBodyPart bodyPart = new MimeBodyPart();
            bodyPart.setContent(mm);
    
            //拼接附件
            MimeMultipart allFile = new MimeMultipart();
            allFile.addBodyPart(file);  //附件1
            allFile.addBodyPart(file2); //附件2
            allFile.addBodyPart(bodyPart);  //正文
            allFile.setSubType("mixed");
    
            //设置到消息中
            mimeMessage.setContent(allFile);
            mimeMessage.saveChanges();  //保存
            return mimeMessage;
        }
    
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐