当前位置:   article > 正文

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

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是网易邮箱账号):

  1. import java.util.Properties;
  2. import javax.mail.Authenticator;
  3. import javax.mail.PasswordAuthentication;
  4. import javax.mail.Session;
  5. //工具类
  6. public final class JavaMailUtils {
  7. private JavaMailUtils() {
  8. }
  9. public static Session createSession() {
  10. //邮箱账号信息
  11. String userName = "m13152448308_1@163.com";
  12. String password = "OBSHGUTWPOLKRGVZ";
  13. //SMTP服务器连接信息
  14. Properties props = new Properties();
  15. props.put("mail.smtp.host","smtp.163.com"); //SMTP主机名
  16. props.put("mail.smtp.prot","465"); //主机端口号
  17. props.put("mail.smtp.auth","true"); //是否需要用户认证
  18. props.put("mail.smtp.starttls.enable","true"); //启用TLS加密
  19. Session session = Session.getInstance(props,new Authenticator() {
  20. @Override
  21. protected PasswordAuthentication getPasswordAuthentication() {
  22. return new PasswordAuthentication(userName, password);
  23. }
  24. });
  25. session.setDebug(true);
  26. return session;
  27. }
  28. }

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

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

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

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

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

抄送:

  1. public class Demo02 {
  2. public static void main(String[] args) {
  3. try {
  4. //创建Session会话
  5. Session session = JavaMailUtils.createSession();
  6. //创建邮件对象
  7. MimeMessage message = new MimeMessage(session);
  8. message.setFrom(new InternetAddress("m13152448308_1@163.com")); // 发件人
  9. message.setRecipient(RecipientType.TO, new InternetAddress("1252303367@qq.com")); //收件人
  10. message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("2436120035@qq.com") , new InternetAddress("1252303367@qq.com")}); // 抄送
  11. message.setSubject("学习JavaMail");
  12. //正文
  13. BodyPart textpart = new MimeBodyPart();
  14. StringBuilder contain = new StringBuilder();
  15. contain.append("<h3>刀剑神域</h3>");
  16. contain.append("<p>非常好看</p>");
  17. contain.append("<img src=\"cid:lmy\"/>");
  18. textpart.setContent(contain.toString(),"text/html;charset=utf-8");
  19. // 附件
  20. BodyPart filepart = new MimeBodyPart();
  21. filepart.setFileName("曹桑");
  22. //上传附件文件
  23. filepart.setDataHandler(
  24. new DataHandler(
  25. new ByteArrayDataSource(
  26. Files.readAllBytes(
  27. Paths.get("C:\\Users\\lenovo\\Desktop\\cbx\\douban\\cao\\1.jpg")),"application/octet-stream")));
  28. filepart.setHeader("Content-ID", "lmy");
  29. // 将正文+附件组装成multipart对象
  30. Multipart multipart = new MimeMultipart();
  31. multipart.addBodyPart(textpart);
  32. multipart.addBodyPart(filepart);
  33. //将multipart对象放入邮箱
  34. message.setContent(multipart);
  35. //发送邮件
  36. Transport.send(message);
  37. } catch (MessagingException e) {
  38. e.printStackTrace();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/95526
推荐阅读
相关标签
  

闽ICP备14008679号