赞
踩
抛开电子邮件不谈,日常生活中我们想要发送信件,邮件的时候需要经历这些步骤:
首先,我们的家门口都有一个信箱,我们将贴好邮票的信件放入信箱,这时候邮局看到邮箱中的信件之后,盖上出发的印章发往目的地的邮局,目的地的邮局收到信件之后,再盖上一个到达的印章发往目的地的信箱里面。
通过上面所说的,我们就可以将电子邮件的发送过程联想出来,电子邮件是通过用户电脑上的邮件软件发送到邮件服务器上,中途可能经过多个邮件服务器的中转,最终到达收件方的邮件软件用于接收。
准备jar包
javax.mail-1.6.2.jar
常用邮件服务商的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() {
- @Override
- protected 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("从入门到<b>放弃</b>","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("<h3>刀剑神域</h3>");
- contain.append("<p>非常好看</p>");
- contain.append("<img src=\"cid:lmy\"/>");
- 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();
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。