11.1 maven依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
11.2 邮箱账号开启STMP与POP3服务(以下qq邮箱示例)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eDHHiHK-1629527623074)(JavaWeb%E6%80%BB%E7%BB%93.assets/image-20210820225330266.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RH96H96D-1629527623077)(JavaWeb%E6%80%BB%E7%BB%93.assets/image-20210820225406618.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EQ4kunJ-1629527623079)(JavaWeb%E6%80%BB%E7%BB%93.assets/image-20210820225611655.png)]
顺便一提: 开启成功后,获得授权码,保存好,这是邮箱发送的凭证。且开启操作各大平台都大同小异。
11.3 代码实现
简单邮件:
private void simpleMail() throws Exception{
final String hostMail="1137208994@qq.com"; //设置自己的邮箱
final String AuthorizationCode="fezitwdsjuqojbgj"; //授权码
String serverHost="smtp.qq.com"; //设置邮箱平台的服务器
String consignee = "2446547730@qq.com"; //设置收件人,可以有很多
//配置服务器内容,照抄即可
Properties prop = new Properties();
prop.setProperty("mail.host",serverHost); //设置qq邮件服务器
prop.setProperty("mail.transport.protocol","smtp"); //设置传输协议
prop.setProperty("mail.smtp.auth","true");
//qq邮箱需要使用SSL加密,其他邮箱平台不需要。照抄即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",sf);
//创建环境对象的Session对象,qq独有,其他平台也不用。
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(hostMail,AuthorizationCode);
}
});
//开启debug模式,可以看看后台输出信息
session.setDebug(true);
//通过session获取transport对象
Transport ts = session.getTransport();
//使用用户名与授权码连接服务器
ts.connect(serverHost,hostMail,AuthorizationCode);
//创建邮件
MimeMessage message = new MimeMessage(session);
//设置邮件的主题,也就是标题
message.setSubject("你好,这是邮件");
//设置邮件发送人,也就是自己
message.setFrom(new InternetAddress(hostMail));
//设置收件人,收件人可以是String类型,也可以是Address[]数组。
message.setRecipients(Message.RecipientType.TO,consignee);
//设置邮件内容
message.setContent("<h1 style=\"color:red\">明天还远吗</h1>","text/html;charset=utf8");
//发送邮件
ts.sendMessage(message,message.getAllRecipients());
//关闭连接
ts.close();
}
携带附件:
private void fileMail() throws Exception{
final String hostMail="1137208994@qq.com"; //设置自己的邮箱
final String AuthorizationCode="fezitwdsjuqojbgj"; //授权码
String serverHost="smtp.qq.com"; //设置邮箱平台的服务器
String consignee = "2446547730@qq.com"; //设置收件人,可以有很多
//配置服务器内容,照抄即可
Properties prop = new Properties();
prop.setProperty("mail.host",serverHost); //设置qq邮件服务器
prop.setProperty("mail.transport.protocol","smtp"); //设置传输协议
prop.setProperty("mail.smtp.auth","true");
//qq邮箱需要使用SSL加密,其他邮箱平台不需要。照抄即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable","true");
prop.put("mail.smtp.ssl.socketFactory",sf);
//创建环境对象的Session对象,qq独有,其他平台也不用。
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(hostMail,AuthorizationCode);
}
});
//开启debug模式,可以看看后台输出信息
session.setDebug(true);
//通过session获取transport对象
Transport ts = session.getTransport();
//使用用户名与授权码连接服务器
ts.connect(serverHost,hostMail,AuthorizationCode);
//创建邮件
MimeMessage message = new MimeMessage(session);
//设置邮件的主题,也就是标题
message.setSubject("网站注册验证码");
//设置邮件发送人,也就是自己
message.setFrom(new InternetAddress(hostMail));
//设置收件人,收件人可以是String类型,也可以是Address[]数组。
message.setRecipients(Message.RecipientType.TO,consignee);
//设置邮件内容:加载图片资源
MimeBodyPart image = new MimeBodyPart();
DataHandler dh =new DataHandler(new FileDataSource("C:\\Users\\yun\\Desktop\\test1.png"));
image.setDataHandler(dh);
image.setContentID("test1.png"); //附件设置setFileName();
//设置邮件内容:准备正文
MimeBodyPart text =new MimeBodyPart();
text.setContent("这是图片邮件<img src='cid:test1.png'","text/html;charset=utf8");
//设置邮件内容:描述数据关系
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related"); //内嵌资源输入related,如果是独立的附件则输入mixed
//设置邮件内容:保存到消息中
message.setContent(mm);
message.saveChanges();
//发送邮件
ts.sendMessage(message,message.getAllRecipients());
//关闭连接
ts.close();
}
在使用中,我们会把它封装成为工具类,并且,桌面端与web端都可以使用。