生成授权码
1.进入设置账户里面,把第一个服务开启
2.点生成授权码,在代码中当成是密码
3.集成到springboot里面,引入依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
4.测试邮箱代码
public static void main(String[] args) {
try {
Properties prop=new Properties();
//设置qq邮箱服务器、"mail.host", "smtp.qq.com")
prop.setProperty("mail.host","stmp.qq.com");
//邮箱发送协议"mail.transport.protocol", "smtp"
prop.setProperty("mail.transport.protocol","stmp");
//需要验证用户账号和密码"mail.smtp.auth", "true"
prop.setProperty("mail.smpt.protocol","stmp");
//设置SSL加密prop.put("mail.smtp.ssl.enable", "true");
// prop.put("mail.smtp.ssl.socketFactory", sf);
MailSSLSocketFactory ssl=new MailSSLSocketFactory();
ssl.setTrustAllHosts(true);
prop.put("mail.stmp.protocol","true");
prop.put("mail.stmp.protocol",ssl);
//使用javaMail发送邮件的5个步骤
//1.创建整个应用程序所需要的环境信息的session信息
Session session=Session.getDefaultInstance(prop, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//发邮件的账号和授权码
return new PasswordAuthentication("","");
};
});
//开启session的debug模式,这样就可以查看程序发送email的运行状态
session.getDebug();
//2.通过session得到transport
Transport transport = session.getTransport();
//3.使用邮箱的用户名和授权码链接邮箱服务器
//第一个参数:qq邮箱服务器
//第二个参数:发件人账号
//第三个参数:授权码
transport.connect("","","");
//4.创建邮件
//创建邮件对象
MimeMessage message =new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress(""));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress(""));
//邮件的标题
message.setSubject("");
//邮件的文本内容
message.setContent("","text/html;charset=UTF-8");
//5.发送邮
transport.sendMessage(message,message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("有异常,发送失败");
}
System.out.println("发送成功");
}
5.把上面的代码改一下就可以发送图片
// //创建邮件对象
// MimeMessage message = new MimeMessage(session);
//
// //指明邮件的发件人
// message.setFrom(new InternetAddress(""));
//
// //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
// message.setRecipient(Message.RecipientType.TO, new InternetAddress(""));
//
// //邮件的标题
// message.setSubject("你是一个好人");
//
// //邮件的文本内容
// // 准备图片数据
// MimeBodyPart image = new MimeBodyPart();
// DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
// image.setDataHandler(dh);
// image.setContentID("bz.jpg");
//
// // 准备正文数据
// MimeBodyPart text = new MimeBodyPart();
// text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8");
//
// // 描述数据关系
// MimeMultipart mm = new MimeMultipart();
// mm.addBodyPart(text);
// mm.addBodyPart(image);
// mm.setSubType("related");
//
// //设置到消息中,保存修改
// message.setContent(mm);
// message.saveChanges();
发送附件和图片代码
public static void main(String[] args) throws MessagingException, GeneralSecurityException {
//创建一个配置文件保存并读取信息
Properties properties = new Properties();
//设置qq邮件服务器
properties.setProperty("mail.host","smtp.qq.com");
//设置发送的协议
properties.setProperty("mail.transport.protocol","smtp");
//设置用户是否需要验证
properties.setProperty("mail.smtp.auth", "true");
//=================================只有QQ存在的一个特性,需要建立一个安全的链接
// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//=================================准备工作完毕
//1.创建一个session会话对象;
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("", "授权码");
}
});
//可以通过session开启Dubug模式,查看所有的过程
session.setDebug(true);
//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
Transport tp = session.getTransport();
//3.连接服务器,需要抛出异常;
tp.connect("smtp.qq.com","","授权码");
//4.连接上之后我们需要发送邮件;
MimeMessage mimeMessage = imageMail(session);
//5.发送邮件
tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//6.关闭连接
tp.close();
}
public static MimeMessage imageMail(Session session) throws MessagingException {
//消息的固定信息
MimeMessage mimeMessage = new MimeMessage(session);
//邮件发送人
mimeMessage.setFrom(new InternetAddress(""));
//邮件接收人,可以同时发送给很多人,我们这里只发给自己;
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(""));
mimeMessage.setSubject("我也不知道是个什么东西就发给你了"); //邮件主题
/*
编写邮件内容
1.图片
2.附件
3.文本
*/
//图片
MimeBodyPart body1 = new MimeBodyPart();
body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png")));
body1.setContentID("yhbxb.png"); //图片设置ID
//文本
MimeBodyPart body2 = new MimeBodyPart();
body2.setContent("请注意,我不是广告<img src='cid:yhbxb.png'>","text/html;charset=utf-8");
//附件
MimeBodyPart body3 = new MimeBodyPart();
body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
body3.setFileName("log4j.properties"); //附件设置名字
MimeBodyPart body4 = new MimeBodyPart();
body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));
body4.setFileName(""); //附件设置名字
//拼装邮件正文内容
MimeMultipart multipart1 = new MimeMultipart();
multipart1.addBodyPart(body1);
multipart1.addBodyPart(body2);
multipart1.setSubType("related"); //1.文本和图片内嵌成功!
//new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(multipart1);
//拼接附件
MimeMultipart allFile =new MimeMultipart();
allFile.addBodyPart(body3); //附件
allFile.addBodyPart(body4); //附件
allFile.addBodyPart(contentText);//正文
allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;
//放到Message消息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges();//保存修改
return mimeMessage;
}