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();
}
}
}

浙公网安备 33010602011771号