准备工作
软件:idea 2020.2.2 x64
jdk:16.0.2
jar包:mail.jar
类介绍
Properties(Java.util.Properties),Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。该类主要用于读取Java的配置文件,能让用户够脱离程序本身去修改相关的变量设置。
Session(Javax.mail.Session),会话控制,保存会话的属性和配置,相当于作为连接服务器和浏览器的通道。会话是一种网络协议,客户端和服务端之间建立连接,交换数据包。
MimeMessage(Javax.mail.internet.MimeMessage),创建邮件对象。
创建邮件
//方法的三个参数分别为会话、发件人,收件人 public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception { // 1. 创建邮件对象 MimeMessage message = new MimeMessage(session); // 2. From: 发件人,InternetAddress的三个参数为发件人,昵称(随意),昵称的字符集 message.setFrom(new InternetAddress(sendMail, "xxx", "UTF-8")); // 3. To: 收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "xxx", "UTF-8")); // 4. Subject: 邮件主题 message.setSubject("邮件发送测试", "UTF-8"); // 5. Content: 邮件正文(可以使用html标签) message.setContent("恭喜您,邮件发送成功!", "text/html;charset=UTF-8"); // 6. 设置发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges(); //8.返回邮件对象 return message; }
发送邮件
//发件人的电子邮箱账号 public static String myEmailAccount = "*****@sina.com"; //(sina)在开通SMTP服务后,会给你一个授权码 public static String myEmailPassword = "********"; // 新浪邮箱的 SMTP 服务器地址为: smtp.sina.com,在网页就可以查询 public static String myEmailSMTPHost = "smtp.sina.com"; // 收件人邮箱 public static String receiveMailAccount = "********@qq.com";
以新浪邮箱为例,点击右上角设置,按照图片打开SMTP服务,打开后会给你一个授权码,类似于这种:3bb1********1dc1bb
public static void main(String[] args) throws Exception { //创建参数配置,连接邮件服务器的参数配置 //Properties对象放便找到发送mail的主机信息(session对象的创建也需要properties) Properties props = new Properties(); //将参数以键值对的形势连接 //使用SMTP作为传输数据的协议 props.setProperty("mail.transport.protocol", "smtp"); //发件人的邮箱SMTP服务器地址 props.setProperty("mail.smtp.host", myEmailSMTPHost); //授权认证,允许发件账号发送邮件 props.setProperty("mail.smtp.auth", "true"); // 创建会话,为数据传输建立通道 Session session = Session.getInstance(props); //MimeMessage对象用来存放实际的mail信息 MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount); // 4. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); //理解为通过账号密码登录 transport.connect(myEmailAccount, myEmailPassword); // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象 时添加的所有收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 7. 关闭连接 transport.close(); }
问题总结
1,部分jar包对于jdk有版本要求,过低版本可能会出现兼容性问题
2,一定要打开对应邮箱的SMTP服务(如上文打开新浪的SMTP服务)