准备工作

要想实现邮件发送, 需要先打开发送邮箱的 POP3/SMTP 服务,打开方式在 设置>帐户 中去打开,打开之后如果是qq邮箱会获得一个授权码,用授权码登录qq邮箱的服务器。其他邮箱开启方法都类似

使用到的 jar 包

mail.jar:https://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar

activation.jar:https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar

maven 地址:

  1. <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
  2. <dependency>
  3. <groupId>javax.mail</groupId>
  4. <artifactId>mail</artifactId>
  5. <version>1.4.7</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
  8. <dependency>
  9. <groupId>javax.activation</groupId>
  10. <artifactId>activation</artifactId>
  11. <version>1.1.1</version>
  12. </dependency>

实现代码

  1. package com.pro.email;
  2. import com.sun.mail.util.MailSSLSocketFactory;
  3. import javax.activation.DataHandler;
  4. import javax.activation.FileDataSource;
  5. import javax.mail.*;
  6. import javax.mail.internet.InternetAddress;
  7. import javax.mail.internet.MimeBodyPart;
  8. import javax.mail.internet.MimeMessage;
  9. import javax.mail.internet.MimeMultipart;
  10. import java.util.Properties;
  11. public class MailDemo {
  12. public static void main(String[] args) throws Exception {
  13. Properties prop = new Properties();
  14. prop.setProperty("mail.host", "smtp.qq.com"); // 设置qq邮件服务器
  15. prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
  16. prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码
  17. // 关于qq邮箱, 还要设置SSL加密
  18. MailSSLSocketFactory sf = new MailSSLSocketFactory();
  19. sf.setTrustAllHosts(true);
  20. prop.put("mail.smtp.ssl.enable", "true");
  21. prop.put("mail.smtp.ssl.socketFactory", sf);
  22. // 使用 JavaMail 发送邮件的5个步骤
  23. // 1. 定义整个应用程序所需要的环境信息的 Session 对象
  24. // 这一步是qq邮箱才有, 其他邮箱不用
  25. Session session = Session.getDefaultInstance(prop, new Authenticator() {
  26. @Override
  27. public PasswordAuthentication getPasswordAuthentication() {
  28. // 发件人邮箱 用户名和授权码
  29. return new PasswordAuthentication("334466@qq.com", "abssktasyncawait");
  30. }
  31. });
  32. // 开启 Session debugger 模式, 可以看到邮件发送的运行状态
  33. session.setDebug(true);
  34. // 2. 通过 Session得到 transport 对象
  35. Transport transport = session.getTransport();
  36. // 3. 使用邮箱用户名和授权码连上邮件服务器 (登陆)
  37. transport.connect("smtp.qq.com", "334466@qq.com", "abssktasyncawait");
  38. // 4. 创建邮件: 写邮件
  39. MimeMessage message = new MimeMessage(session);
  40. // 设置邮件的发件人
  41. message.setFrom(new InternetAddress("334466@qq.com"));
  42. // 设置邮件的收件人
  43. message.setRecipient(Message.RecipientType.TO,new InternetAddress("789654123@qq.com"));
  44. // 邮件标题
  45. message.setSubject("Java Test邮件");
  46. // ========= 复杂邮件内容 =========
  47. // 准备附件数据
  48. MimeBodyPart fileMime = new MimeBodyPart();
  49. fileMime.setDataHandler(new DataHandler(new FileDataSource("src/resource/pro.txt")));
  50. fileMime.setFileName("pro.txt"); // 设置文件名称
  51. // 准备图片数据
  52. MimeBodyPart image = new MimeBodyPart();
  53. // 图片需要经过数据处理, DataHandler: 数据处理
  54. DataHandler dh = new DataHandler(new FileDataSource("src/resource/test.jpg"));
  55. image.setDataHandler(dh); // 把处理的图片数据放到body中
  56. image.setContentID("test.jpg"); // 给图片设置ID, 后面可以用到
  57. image.setFileName("test.jpg");
  58. // 准备正文数据
  59. MimeBodyPart text = new MimeBodyPart();
  60. text.setContent("<a href='https://www.tmall.com/' target='_blank'>这是一封正文带图片的邮件 <img src='cid:test.jpg' /></a>", "text/html; charset=UTF-8");
  61. // 描述数据关系
  62. MimeMultipart mm = new MimeMultipart();
  63. mm.addBodyPart(text);
  64. mm.addBodyPart(image);
  65. mm.addBodyPart(fileMime);
  66. mm.setSubType("mixed"); // mixed 最大 支持附件, related 支持图片
  67. // 把编辑的邮件保存到消息中, 保存更改
  68. message.setContent(mm);
  69. message.saveChanges();
  70. // ========= 复杂邮件内容 =========
  71. // 5. 发送邮件
  72. transport.sendMessage(message, message.getAllRecipients());
  73. // 关闭连接
  74. transport.close();
  75. }
  76. }

Java 使用 mail.jar 实现邮件发送的更多相关文章

  1. 用系统默认mail服务实现邮件发送

    用系统默认mail服务实现邮件发送 1.操作步骤 第一步:设备服务器发送邮件要用的,邮箱地址,账号密码 编辑/etc/mail.rc vim /etc/mail.rc 在文件的结尾追加,账号信息配置 ...

  2. centos下利用mail命令进行邮件发送

    centos下默认自带mail命令: 可以用如下命令查看存放位置: which mail 结果如下: 如果没有安装可以使用 如下命令安装 yum -y install mailx 利用mail命令进行 ...

  3. Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类

    准备工作 发送邮件需要获得协议和支持! 开启服务 POP3/SMTP 服务 如何开启 POP3/SMTP 服务:https://www.cnblogs.com/pojo/p/14276637.html ...

  4. 使用Spring的JAVA Mail支持简化邮件发送(转)

    闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...

  5. Java网络编程:QQ邮件发送客户端程序设计

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  6. Java Mail 实现第三方邮件发送功能

    1 创建一个用于发送邮件的类 package com.latiny.service; import java.io.IOException; import java.io.InputStream; i ...

  7. 使用Spring的JAVA Mail支持简化邮件发送

    http://www.cnblogs.com/codeplus/archive/2011/11/03/2232893.html

  8. java 邮件发送工具类

    首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...

  9. java 邮件发送工具类【来源网络自己已经实际应用】

    最近在做一个Java发送邮件的工具类,现在分享一下完整的代码 首先需要java邮件的包javax.mail-1.5.4.jar 之前因为链接给错了,很不好意思,现在重新发一次. 包在这里可以下载htt ...

随机推荐

  1. C++ 纯虚函数与抽象类——virtual 和纯说明符 “=0”

    什么时候使用纯虚函数 某些类,在现实角度和项目角度都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数只是为了提供一个形式上的接口,准备上子类来做具体的实现.此时这个方法就可以定义为&qu ...

  2. MobaXterm无法退格删除

    MobaXterm退格删除出现^H,总是要取消输入重新敲语句,很麻烦 解决方法:打开MobaXterm-->settings-->Configuration,把"Backspac ...

  3. 解决python3 ,ModuleNotFoundError: No module named 'pip'问题

    今天想要装一下PyYmal第三方库来写一下Python的desired_caps.yaml文件,候发现cmd窗口下无法执行pip命令, 出现了:ModuleNotFoundError: No modu ...

  4. 网站开发学习Python实现-Django学习-介绍(6.1.1)

    @ 目录 1.MVT 2.ORM 关于作者 1.MVT 主要的目的是为了快速,简便的开发数据库驱动的网站,强调代码的复用,多个组件可以很方便以插件的方式服务于整个框架,采用的是MVT设计模式(差不多的 ...

  5. 真香!Python十大常用文件操作,轻松办公

    日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...

  6. 干货满满,32个常用 Python 实现,你学废了嘛!

    1. 冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in range(len(lis)- ...

  7. js中Tabs插件打开的标签页过多自动关闭

    js方法 function addTab(ResourceID, ResourceName, Url) { if (Url != "" && Url != null ...

  8. python初学者-判断今天是今年的第几天代码

    判断今天是今年的第几天源代码 import time date =time.localtime() year,month,day=date[:3] day_month=[31,28,31,30,31, ...

  9. 深入浅出JVM(一):你写得.java文件是如何被加载到内存中执行的

    众所周知,.java文件需要经过编译生成.class文件才能被JVM执行. 其中,JVM是如何加载.class文件,又做了些什么呢? .class文件通过 加载->验证->准备->解 ...

  10. Spring4.3入门 Spring 依赖关系

    Spring4.3入门 Spring 依赖关系 spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar ,所以,搞清楚它们之间的关系,配置maven依赖就可以简 ...