Java实现发送QQ邮件功能(带附件)

Java实现发送QQ邮件功能(带附件)

首先我们需要两个jar包,点击下面即可下载这两个包:

或者引入maven

<!--发送邮件-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

代码示例:

package com.pipi.mail;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;

public class SendMail {

    public static void main(String[] args) throws Exception {
        final String from = "xxxxxxx@qq.com"; //发件人的邮箱地址
        String to = "xxxxxxx@qq.com";    //收件人的邮箱地址
        String subject = "测试";    //邮件主题
        String body = "邮件正文";    //邮件内容

        //设置发送邮件的一些属性
        Properties prop = new Properties();
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.host", "smtp.qq.com");
        prop.setProperty("mail.smtp.port", "587"); // 有些代码端口是465是有问题的
        prop.setProperty("mail.smtp.auth", "true");
        prop.setProperty("mail.debug", "true");
        prop.setProperty("mail.smtp.ssl.enable", "true"); //qq邮箱必须设置这一项,ssl加密选项


        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //这里需要验证邮箱的授权码,QQ邮箱需要授权码
                return new PasswordAuthentication(from, "第三方登录授权码");
            }
        });

        MimeMessage message = new MimeMessage(session);
        try {
            Transport transport = session.getTransport();
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSentDate(new Date());
            message.setSubject(subject);

            // 创建消息体部分
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText("这是邮件正文");

            // 创建多重消息
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart); // 将消息体部分加入到多重消息中

            // 创建一个附件
            messageBodyPart = new MimeBodyPart();
            String filePath = "/Users/apple/Desktop/测试.docx";  // 注意windows的地址问题
            File file = new File(filePath);
            DataSource source = new FileDataSource(file);
            messageBodyPart.setDataHandler(new DataHandler(source));
            String fileName = filePath.substring(filePath.lastIndexOf('/') + 1);
            System.out.println(fileName);
						// messageBodyPart.setFileName(fileName); 出现乱码问题
            messageBodyPart.setFileName(MimeUtility.encodeText(fileName));

            multipart.addBodyPart(messageBodyPart);

            message.setContent(multipart);
            message.saveChanges();
            session.setDebug(true);
            transport.connect(from, "第三方登录授权码");
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

posted @ 2021-01-07 00:14  皮皮龙喔  阅读(437)  评论(0)    收藏  举报