获取QQ邮箱的支持
打开邮箱 ——设置
点击账户
是一个16位的字符串。务必保存好。
在IDEA中导入依赖。
# 导入依赖
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
配置工具类
package com.chang.test;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/*
用来验证SMTP服务器身份。程序继承了Authenticator类,它主要用来实现登录邮件服务器时的认证。
它包含两个属性:username和password,分别用来存储认证时所需的用户名和密码信息。
程序重写了Authenticator类的getPasswordAuthentication()方法,该方法返回PasswordAuthentication对象,
此对象包含通过STMP服务器身份验证所需的用户名和密码,供认证时session调用。
Auth类,它继承了Authenticator类
*/
public class Auth extends Authenticator {
private String username = "";
private String password = "";
public Auth(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
package com.chang.test;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/*
代码说明:该程序为一个邮件发送通用类的程序,SendMail构造方法实现对发送邮件身份的认证,获得Session对象。
该方法中SMTPHost、Port、MailUsername、MailPassword分别表示所使用的SMTP服务器、服务器的smtp端口、用户名和密码。
sendingMimeMail()方法为发送邮件的方法,在该方法需要传入的参数中,MailFrom为发件人电子信箱,MailTo为收件人电子信箱,
MailCopyTo为抄送人电子信箱,MailBCopyTo为暗送人电子信箱,
MailSubject为发送邮件主题,MailBody为发送邮件正文。
sendingMimeMail()返回boolean类型,表示是否发送成功。
发送邮件时先调用构造方法SendMail()创建邮件发送对象,然后调用sendingMimeMail()方法发送。
*/
public class SendMail {
private Properties props; //系统属性
private Session mailSession; //邮件会话对象
private MimeMessage mimeMsg; //MIME邮件对象
public SendMail(String SMTPHost, String Port, String MailUsername, String MailPassword) {
Auth au = new Auth(MailUsername, MailPassword);
//设置系统属性
props=java.lang.System.getProperties(); //获得系统属性对象
props.put("mail.smtp.host", SMTPHost); //设置SMTP主机
props.put("mail.smtp.port", Port); //设置服务端口号
props.put("mail.smtp.auth", "true"); //同时通过验证
//获得邮件会话对象
mailSession = Session.getInstance(props, au);
}
public boolean sendingMimeMail(String MailFrom, String MailTo,
String MailCopyTo, String MailBCopyTo, String MailSubject,
String MailBody) {
try {
//创建MIME邮件对象
mimeMsg=new MimeMessage(mailSession);
//设置发信人
mimeMsg.setFrom(new InternetAddress(MailFrom));
//设置收信人
if(MailTo!=null){
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(MailTo));
}
//设置抄送人
if(MailCopyTo!=null){
mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(MailCopyTo));
}
//设置暗送人
if(MailBCopyTo!=null){
mimeMsg.setRecipients(javax.mail.Message.RecipientType.BCC,InternetAddress.parse(MailBCopyTo));
}
//设置邮件主题
mimeMsg.setSubject(MailSubject,"utf-8");
//设置邮件内容,将邮件body部分转化为HTML格式
mimeMsg.setContent(MailBody,"text/html;charset=utf-8");
//发送邮件
Transport.send(mimeMsg);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
package com.chang.test;
public class SendDemo {
/**
* 若频繁发送,腾讯服务器会将邮件自动识别为垃圾邮件并且屏蔽
* @param args
*/
public static void main(String[] args) {
String SMTPHost="smtp.qq.com";
String Port="587";
String MailUsername=""; //直接用我的邮件进行发送测试
String MailPassword=""; //密码请勿修改 前面的16位字符串
SendMail sendMail=new SendMail(SMTPHost,Port,MailUsername,MailPassword);
String MailFrom=""; //发件人
String MailTo=""; //收件人
String MailCopyTo=null; //抄送人
String MailBCopyTo=null; //暗送人
String MailSubject="JavaSE发送邮件测试"; //邮件主题(可以手动更改)
String MailBody="hahahaha"; //邮件内容
//发送邮件
boolean isSend=sendMail.sendingMimeMail(MailFrom, MailTo, MailCopyTo, MailBCopyTo, MailSubject, MailBody);
if(isSend){
System.out.println("邮件发送成功");
}else{
System.out.println("邮件发送失败");
}
}
}