JavaMail-利用Java完成邮件发送(包括附件)

抛开电子邮件不谈,日常生活中我们想要发送信件,邮件的时候需要经历这些步骤:

首先,我们的家门口都有一个信箱,我们将贴好邮票的信件放入信箱,这时候邮局看到邮箱中的信件之后,盖上出发的印章发往目的地的邮局,目的地的邮局收到信件之后,再盖上一个到达的印章发往目的地的信箱里面。

通过上面所说的,我们就可以将电子邮件的发送过程联想出来,电子邮件是通过用户电脑上的邮件软件发送到邮件服务器上,中途可能经过多个邮件服务器的中转,最终到达收件方的邮件软件用于接收。

发送邮件前的准备:

准备jar包

javax.mail-1.6.2.jar

准备SMTP登录信息:

常用邮件服务商的SMTP信息:
qq邮箱:SMTP服务器是:smtp.qq.com、端口是465/587
163邮箱:SMTP服务器是:smtp.163.com、端口是465
126邮箱:SMTP服务器是:smtp.126.com、端口是465/994

这些准备信息我封装到了一个JavaMailUtils类中(userName是网易邮箱账号):

import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;//工具类
public final class JavaMailUtils {private JavaMailUtils() {	}public static Session createSession() {//邮箱账号信息String userName = "m13152448308_1@163.com";String password = "OBSHGUTWPOLKRGVZ";//SMTP服务器连接信息Properties props = new Properties();props.put("mail.smtp.host","smtp.163.com"); //SMTP主机名props.put("mail.smtp.prot","465"); //主机端口号props.put("mail.smtp.auth","true"); //是否需要用户认证props.put("mail.smtp.starttls.enable","true"); //启用TLS加密Session session = Session.getInstance(props,new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});session.setDebug(true);return session;}
}

将准备信息以键值对的方式存入props对象里,在下面创建一个session会话对象,调用getInstance方法将准备信息和用户名密码传进去,注意Authenticator在这里是一个匿名子类的存在,需要重写抽象类中的抽象方法。

做好了以上的准备工作,我们重新创建一个类,用于发送和接受邮件。


public class Demo02 {public static void main(String[] args) {try {//1.创建Session会话Session session = JavaMailUtils.createSession();//2.创建邮件对象MimeMessage message = new MimeMessage(session);message.setSubject("学习JavaMail"); //设置邮件标题message.setText("从入门到放弃","utf-8","html"); //设置邮件正文message.setFrom(new InternetAddress("1315***1@163.com")); // 发件人message.setRecipient(RecipientType.TO, new InternetAddress("1252303367@qq.com")); //收件人//发送邮件Transport.send(message);} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

这样我们就完成了简单的邮件发送。(注意:邮件正文中可以包含html标签)

在上面的基础上我们知道RecipientType.TO是给主要收件人发送邮件,我们除此之外还可以通过RecipientType.CC抄送多个收件人。

抄送:

public class Demo02 {public static void main(String[] args) {try {//创建Session会话Session session = JavaMailUtils.createSession();//创建邮件对象MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress("m13152448308_1@163.com")); // 发件人message.setRecipient(RecipientType.TO, new InternetAddress("1252303367@qq.com")); //收件人message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("2436120035@qq.com") , new InternetAddress("1252303367@qq.com")}); // 抄送message.setSubject("学习JavaMail");//正文BodyPart textpart = new MimeBodyPart();StringBuilder contain = new StringBuilder();contain.append("

刀剑神域

");contain.append("

非常好看

");contain.append("");textpart.setContent(contain.toString(),"text/html;charset=utf-8");// 附件BodyPart filepart = new MimeBodyPart();filepart.setFileName("曹桑");//上传附件文件filepart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\lenovo\\Desktop\\cbx\\douban\\cao\\1.jpg")),"application/octet-stream")));filepart.setHeader("Content-ID", "lmy");// 将正文+附件组装成multipart对象Multipart multipart = new MimeMultipart();multipart.addBodyPart(textpart);multipart.addBodyPart(filepart);//将multipart对象放入邮箱message.setContent(multipart);//发送邮件Transport.send(message);} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部