使用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

相关文章

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

flask库中sessions.py的使用小结

《flask库中sessions.py的使用小结》在Flask中Session是一种用于在不同请求之间存储用户数据的机制,Session默认是基于客户端Cookie的,但数据会经过加密签名,防止篡改,... 目录1. Flask Session 的基本使用(1) 启用 Session(2) 存储和读取 Se

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (