使用java mail进行简单的邮件收发

2024-09-04 12:38

本文主要是介绍使用java mail进行简单的邮件收发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天开发过程中遇到降价通知的问题,价格下降了则发送email到指定邮箱。顺便学习下java如何进行简单的邮件收发。 

sun公司提供的 java mail api能够很好的解决这个问题,下面是具体的思路与代码。 
1、发邮件: 
主要分为以下四个步骤: 
a、创建收发邮件session(创建时可以使用java.util.properties类进行各类参数的写入,并使用Authencator类进行邮箱校验); 
b、由session对象创建mimeMessage邮件; 
c、由session对象创建邮件发送对象Transport; 
d、有发送对象发送邮件并关闭transport; 
代码如下: 
Java代码   收藏代码
  1. public class MailInit {  
  2.   
  3.     /** 
  4.      * 初始化邮件收发Session 
  5.      * @author zhanghao 
  6.      * 20150327 
  7.      * */  
  8.     public static Session init(String host,final String username,final String password){  
  9.           
  10.         //初始化邮件相关配置信息  
  11.         Properties properties = new Properties();  
  12.         properties.setProperty("mail.smtp.auth""true");  
  13.         properties.setProperty("mail.smtp.host", host);  
  14.         properties.setProperty("mail.transport.protocol""smtp"); //校验有关?  
  15.         properties.setProperty("mail.store.protocol""pop3"); //收邮件  
  16.           
  17.         //完成邮箱用户名、密码校验  
  18.         Authenticator authenticator = new Authenticator() {  
  19.             protected PasswordAuthentication getPasswordAuthentication(){  
  20.                 return new PasswordAuthentication(username, password);  
  21.             }  
  22.         };  
  23.         //创建收发邮件Session  
  24.         Session session = Session.getInstance(properties, authenticator);  
  25.         return session;  
  26.     }  
  27.       
  28.   
  29. /** 
  30.      * 邮件发送(单人) 
  31.      * */  
  32.     public void sendSingle(String subject,String contect,String username,String password,InternetAddress address){  
  33.         String host = MailInit.getHostByUserName(username);  
  34.         Session session =MailInit.init(host, username, password);  
  35.           
  36.         //创建mime邮件  
  37.         MimeMessage message = new MimeMessage(session);  
  38.         try {  
  39.             //设置发件人  
  40.             message.setFrom(new InternetAddress(username));  
  41.             //设置收件人  
  42.             message.addRecipient(Message.RecipientType.TO, address);  
  43.             //设置主题  
  44.             message.setSubject("邮件主题");  
  45.             //设置内容  
  46.             message.setContent(contect,"text/html;charset=utf-8");  
  47.             //发送邮件  
  48.             Transport.send(message);  
  49.             logger.info("邮件发送成功!!");  
  50.         } catch (MessagingException e) {  
  51.             String msg = "邮件发送失败!!";  
  52.             logger.error(msg);  
  53.             throw new RuntimeException(msg);  
  54.         }  
  55.     }  
  56.       
  57.     /** 
  58.      * 邮件群发 
  59.      * */  
  60.     public void sendGroup(String subject,String contect,String username,String password,InternetAddress[] addressGroup){  
  61.         String host = MailInit.getHostByUserName(username);  
  62.         Session session =MailInit.init(host, username, password);  
  63.           
  64.         //创建mime邮件  
  65.         MimeMessage message = new MimeMessage(session);  
  66.         try {  
  67.             //设置发件人  
  68.             message.setFrom(new InternetAddress(username));  
  69.             //设置收件人  
  70.             message.addRecipients(RecipientType.TO, addressGroup);  
  71.             //设置主题  
  72.             message.setSubject("邮件主题");  
  73.             //设置内容  
  74.             message.setContent(contect,"text/html;charset=utf-8");  
  75.             //发送邮件  
  76.             Transport.send(message);  
  77.         } catch (MessagingException e) {  
  78.             String msg = "邮件发送失败!!";  
  79.             logger.error(msg);  
  80.             throw new RuntimeException(msg);  
  81.         }  
  82.           
  83.     }  
2、收邮件主要分为以下几个步骤: 
a、创建收发邮件session(创建时可以使用java.util.properties类进行各类参数的写入,并使用Authencator类进行邮箱校验); 
b、由session对象创建store对象连接邮箱; 
c、由store对象创建Folder文件夹(注:此时创建完成之后需要使用open方法打开文件夹); 
d、Folder的实例调用getMessage方法 返回Message数组,获取邮件内容。 
代码如下: 
Java代码   收藏代码
  1. public void receiveMail(String username,String password){  
  2.         String host = MailInit.getPop3ByUserName(username);  
  3.         Session session =MailInit.init(host, username, password);  
  4.         //创建store  
  5.         Store store;  
  6.         try {  
  7.             store = session.getStore();  
  8.             store.connect(host,110,username,password);    
  9.             //连接 完成后打开Folder  
  10.             Folder folder = store.getFolder("INBOX"); //INBOX是POP3唯一可以使用的文件夹。如果使用IMAP,还可以用其它的文件夹。  
  11.             folder.open(Folder.READ_ONLY);  
  12.             Message[] messages = folder.getMessages();  
  13.             for (Message message : messages) {  
  14.                 System.out.println(message.getSubject());  
  15.             }  
  16.             logger.info("接收邮件成功!!");  
  17.         } catch (MessagingException e) {  
  18.             String msg = "接收邮件失败!!";  
  19.             logger.error(msg);  
  20.             throw new RuntimeException(msg);  
  21.         }  
  22.           
  23.     }  
完整代码下载地址:https://github.com/wasapii/JavaMailDemo/  

这篇关于使用java mail进行简单的邮件收发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136049

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解