利用 Java Mail 来收发邮件

关于使用Spring Mail以及Java Mail发送邮件的总结 以前我们使用JavaMail发送邮件,步骤挺多的。现在的项目跟Spring整合的比较多。所以这里主要谈谈SpringMail发送。 一、相关配置 1.导入jar包 如果是Maven项目,Maven地址如下: <dependency> <groupId>org.springframework</groupId> ... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 随着网络应用的不断推广,电子邮件越来越多的被大家使用。虽然我们往往将电子邮件与 Foxmail、Outlook 这样的电子邮件客户端联系起来,但是往往我们也需要自己编程实现发送接收邮件,例如在一个网站注册用户后网站发出的回执mail,或者在网络购物的时候,在完成订单后的几分钟之内发送确认电子邮件。对于这样的需求,我们不能通过已有的邮件客户端而需要自己编写邮件发送或者处理程序。在这里向大家讲解一下如何利用JavaMail来实现邮件的收发。 注意:本文只打算讨论JavaMail收发带附件邮件的一些技巧,所以只是给出部分代码 1.发送带附件的邮件 我们平时发送的邮件主要可以分解成2大部分,一个是发信人,接信人,主题等邮件标头,另外一部分是邮件内容,它包括了邮件的附件。我们在发送普通邮件的时候content设置的类型是"text/html",带上附件后,我们需要把content的类型设置成Multipart,这时content包括了附件和"text/html"类型的正文。下面的这个告诉大家如何把附件放置到邮件中。 private Multipart getMultipart() throws MessagingException,UnsupportedEncodingException { MimeMultipart mp = new MimeMultipart(); try { //设置content里的内容 MimeBodyPart contentMbp = new MimeBodyPart(); //请指定字符集,否则会是乱码 contentMbp.setContent(_mailContent.getContent(), "text/html; charset=GB2312"); mp.addBodyPart(contentMbp); //添加附件 for (int i=0;i<_mailAttachment.getAttachPath().size();i ) { MimeBodyPart mbp = new MimeBodyPart(); FileDataSource fds = new FileDataSource((String) _mailAttachment.getAttachPath().get(i)); mbp.setDataHandler(new DataHandler(fds)); mbp.setFileName(MimeUtility.encodeWord(fds.getName(), "GB2312",null)); mp.addBodyPart(mbp); } } catch(MessagingException ie) { System.out.println("Set Content Message error..." ie.getMessage()); throw ie; } catch(UnsupportedEncodingException ie) { System.out.println("Encode the fileName error..." ie.getMessage()); throw ie; } return mp; } 放置附件的注意事项如下: 在发mail时需要注意字符集的问题。不但content里要设置,而且文件名也需要设置。如果我们去掉mbp.setFileName(MimeUtility.encodeWord(fds.getName(),"GB2312",null));这句话,那么你选中的附件还是会带到邮件里,但是在附件里看不到。我们可以通过查看邮件大小知道。我们利用这个特点来实现发送content中写的是html语言,而且包含图片信息的邮件。 2.发送content中包含html页面的邮件 大家都知道html语言可以带上图片链接(),那么我们在发送邮件的时候就需要对这些链接的图片做特殊处理。否则在对方接收到邮件的时候会看不到图片。我们特殊处理的方法就是把它们当成附件发送,但不显示在附件里。要做到这些就首先需要对输入的content进行解析,找到所带图片的路径。然后把content中这段代码变成。我们在发送附件的时候用mbp1.setHeader("Content-ID","IMG") 来把图片和附件对应上。如何具体解析content的操作我就不赘述了,我现在给出如何把修改好的content发送出去的例子。 //对于发送html类型的content。里边包括图片。 for(int i=0;i<_mailContent.getImgHash().size();i ) { MimeBodyPart mbp1 = new MimeBodyPart(); //得到图片的数据 FileDataSource fds = new FileDataSource( (String)_mailContent.getImgHash().get("IMG" i)); //设置到MimeBodyPart中 mbp1.setDataHandler(new DataHandler(fds)); //设置图片附件和html的对应关系 mbp1.setHeader("Content-ID","IMG" i); mp.addBodyPart(mbp1); } 3.邮件的状态 我们在阅读完邮件后可以给邮件设置删除标志,然后在关闭FOLDER的时候用true来清空已经被标志为删除的邮件。邮件的状态是在类FLAGS.FLAG中定义的。包括如下几种: Flags.Flag.ANSWERED Flags.Flag.DELETED Flags.Flag.DRAFT Flags.Flag.FLAGGED Flags.Flag.RECENT Flags.Flag.SEEN Flags.Flag.USER 我们可以根据不同的需要进行设置,但是需要注意的是,不是所有的服务器都支持这些状态。我们在做操作之前可以用getPermanentFlags方法来得到Message中的状态。参考下面代码 Message m = folder.getMessage(1); // set the DELETED flag m.setFlag(Flags.Flag.DELETED, true); // Check if DELETED flag is set of this message if (m.isSet(Flags.Flag.DELETED)) System.out.println("DELETED message"); // Examine ALL system flags for this message Flags flags = m.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); for (int i = 0; i < sf.length; i ) { if (sf[i] == Flags.Flag.DELETED) System.out.println("DELETED message"); else if (sf[i] == Flags.Flag.SEEN) System.out.println("SEEN message"); } 4.接收带附件的邮件 在带有附件的邮件中,消息的内容是Multipart型,这样我们就需要解析它来得到content和附件(它是发送带附件的邮件的逆向过程)。大家在使用outlook、foxmail这些电子邮件客户端的时候会发现,我们的邮件被从服务器上下载下来并且保存到本地硬盘上了,这种方式方便我们离线浏览邮件。在下面的范例中我们也把服务器上的邮件保存到本地。如果有兴趣大家可以编写一个客户端的图形界面来读取保存下来的邮件。 在下面的例子里,我只是向大家介绍如何解析附件。 private void getAttachFile(Part messagePart,BufferedOutputStream writeAttachObj) throws IOException, MessagingException { Object content = messagePart.getContent() ; try { //这种情况下的邮件都是用multi模式发送的, // 这种模式包括有附件的邮件和用html表示content的邮件 if (content instanceof Multipart) { Multipart contentTmp = (Multipart) content ; //如果是MULTI模式发送的,BodyPart(0).getContent()肯定就是content System.out.println("content==" contentTmp.getBodyPart(0).getContent()) ; //getCount()可以得到content中bodyPart的个数,content就是第一个 //bodyPart,其它的附件按照顺序类推。但是有的时候附件就是另外一个邮件, //而这个邮件里边可能有其他的附件。下面代码用循环对嵌套情况进行解析。 for (int i = 0 ; i < contentTmp.getCount() ; i ) { if (contentTmp.getBodyPart(i).isMimeType("multipart/*")) { Multipart multipart = (Multipart) contentTmp.getBodyPart(i).getContent() ; //这个地方增加循环是为了解决嵌套附件的情况。 for (int k = 0 ; k < multipart.getCount() ; k ) { //content也会存在于INPUTSTREAM中。 saveAttacheFile(multipart.getBodyPart(k).getContentType(), multipart.getBodyPart(k).getDisposition(), multipart.getBodyPart(k).getFileName(), multipart.getBodyPart(k).getInputStream(), writeAttachObj); } } else { saveAttacheFile(contentTmp.getBodyPart(i).getContentType(), contentTmp.getBodyPart(i).getDisposition(), contentTmp.getBodyPart(i).getFileName(), contentTmp.getBodyPart(i).getInputStream(), writeAttachObj); } } } //这种情况中邮件是纯文本形式,并且没有附件 else { writeAttachObj.write(("content = " content " ").getBytes()); writeAttachObj.flush(); } } catch (Exception ie) { System.out.println("exception====" ie.getMessage()) ; } }
javax.mail实现收发邮件 javax.mail实现收发邮件添加依赖开通POP3/SMPT服务发送邮件更改端口 添加依赖 在pom.xml 文件里面添加依赖 <!--mail--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 开通P 阅读详情

相关推荐

Java使用javax.mail发送邮件

强力推荐Java架构师学习网址:https://qiuyadongsite.github.io/ 这里使用maven项目进行开发 1.首先pom中加载jar <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId&gt...

u010446936的博客 1万+

JavaMail详解

引用自http://blog.sina.com.cn/s/articlelist_1832656582_7_1.html [JavaMail]1 基础 A、简介 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程...

jceator123的博客 3636

Java Mail发送邮件(带多个附件)

Java Mail是利用已存在的邮箱账号,不必登录如网易邮箱,qq邮箱等官方邮箱网站而使用程序发送邮件。这在web中很常见,比如直接在招聘网站给hr发邮件就是一个典型运用。 利用Java Mail发送邮件的大致步骤:   1.首先,构建一个用于登录校验的类,确保你对此邮箱账户有发送邮件的权限。(相当于登录邮箱的过程) public class MailAuthenticator exten

qq_18875541的博客 4100

java mail 保存邮件_利用 Java Mail 来收发邮件 阅读次数645

利用 Java Mail 来收发邮件阅读次数645出处 不详随着网络应用的不断推广,电子邮件越来越多的被大家使用。虽然我们往往将电子邮件与 Foxmail、Outlook 这样的电子邮件客户端联系起来,但是往往我们也需要自己编程实现发送接收邮件,例如在一个网站注册用户后网站发出的回执mail,或者在网络购物的时候,在完成订单后的几分钟之内发送确认电子邮件。对于这样的需求,我们不能通过已有的邮件客户...

weixin_32534653的博客 366

Java mail邮件开发 OA办公系统

<font color="red">3</font></a>封未读邮件 <a href="sendEmail.jsp">[写邮件]</a><td height="30">今天是 2013年1月4日 10:32:44</td><a href="exit/ExitServlet">[退出登陆]</a><td><a href="#">删除发件人</td><td>序号</td><td>标题</td><td>状态</td><td>删除

N201871643的博客 182

Overleaf-Latex-Elsevier-图、表、参考文献标题及引用、伪代码写法(绝对详细直观且易懂)

overleaf爱思唯尔模板踩过的一些坑以及解决办法

2403_87584552的博客 5851

JavaMail发送和接收邮件

一、JavaMail概述:       JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。       厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议

3657

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标

使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标...

图特摩斯科技-博客 4280

java mail 删除邮件 四

其实删除邮件很简单,在接收邮件的基础上对需要删除的邮件做一个标记(Flags类),然后程序就会对有做了标记的邮件进行删除。 在Flags类的内部类Flag中预定义了一些标志: Flags.Flag.ANSWERED Flags.Flag.DELETED (删除的标记,这一讲我们就要用到这个标记) Flags.Flag.DRAFT Flags.Flag.FLAGGED Flags

chaozhidan的专栏 3288

CCS20实战入门:第一个工程搭建示例

通过实际操作演示如何在ccs20中创建并配置首个开发项目,涵盖环境设置与基础调试步骤,帮助新手快速上手ccs20集成开发环境,提升嵌入式开发效率。

weixin_31185473的博客 888

基于单片机负载控制的无人机电气设备监测系统设计

为深入分析无人机电气设备的电子负载性能,实现对传输电子量的合理性监管与控制,设计基于单片机负载控制的无人机电气设备监测系统;利用电气信号发生电路,构建负载网络控制器与以太网模块运行所需的电气设备负载环境,借助PCB监控板建立PLC扩展负载模块与核心监控主机之间的物理连接关系,实现无人机电气设备监测系统的硬件执行环境搭建;在此基础上,通过STM32型单片机移植协议,确定无人机电气设备通信主机的现有组态形式,联合已设定的监控任务有线级条件,实现监测系统的软件执行环境搭建,完成基于单片机负载控制的无人机电气设备监

weixin_45905610的博客 1300

通过Java mail对邮件进行flag标记

下面是如何在Java中构建这个过程的简化概述,这里假设使用的是IMAP邮件账户。

weixin_45509406的博客 986

极验第四代滑块验证码破解(三):滑块轨迹构造

极验第四代滑块验证码破解(三):滑块轨迹构造声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:

帯泪的鱼的博客 8624

java-mail_利用 Java Mail 来收发邮件

利用 Java Mail 来收发邮件作者:文章来源:发布日期:2007年01月08日随着网络应用的不断推广,电子邮件越来越多的被大家使用。虽然我们往往将电子邮件与 Foxmail、Outlook 这样的电子邮件客户端联系起来,但是往往我们也需要自己编程实现发送接收邮件,例如在一个网站注册用户后网站发出的回执mail,或者在网络购物的时候,在完成订单后的几分钟之内发送确认电子邮件。对于这样的...

weixin_33263633的博客 448

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数

statistics+insight+vista+power 530

java发送带附件的邮件

先总结一下: java发邮件有三种方式: 1、使用javax.mail传统方式。需引入mail-1.4.jar包。这是用java自带的类库实现,但是实现起来比较麻烦。 2、使用Apache Commons Mail方式。需要引入commons-email-1.2.jar包。用MultiPartEmail对象,设置完邮箱信息和EmailAttachment附件对象后,使用send方法发送。 ...

sumengnan的博客 2770

《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步

我们将数据釆集分为日志采集和数据库数据同步两 部分。数据同步技术更通用的含义是不同系统间的数据流转,有多种不 同的应用场景。主数据库与备份数据库之间的数据备份,以及主系统与 子系统之间的数据更新,属于同类型不同集群数据库之间的数据同步。 另外,还有不同地域、不同数据库类型之间的数据传输交换,比如分布 式业务系统与数据仓库系统之间的数据同步。对于大数据系统来说,包 含数据从业务系统同步进入数据仓库和数据从数据仓库同步进入数据 服务或数据应用两个方面。本章侧重讲解数据从业务系统同步进入数据 仓库这个环节,但其适

m0_54252387的博客 962

java电子邮件收发系统的设计与实现_基于Java Mail的电子邮件收发系统的设计与实现毕业论文.doc...

基于Java Mail的电子邮件收发系统的设计与实现毕业论文目 录第1章 概述11.1研究目的和意义11.2国内外发展趋势和现状21.3 系统特点4第2章 相关技术和工具简介62.1 Swing简介62.2 Java Mail简介62.3 Java平台简介72.4 Eclipse简介7第3章 系统需求分析和总体设计93.1用户对电子邮件系统的需求93.2产品可行性分析103.3系统总体设计1...

weixin_35705475的博客 2576

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用JavaMail收邮件[使用POP3接收邮件]

avax.mail.Folder:该类用于描述邮件的分级组织,如收件箱、草稿箱。它的open方法打开分级组织,close方法关闭分级组织,getMessages方法获得分级组织中的邮件,getNewMessageCount方法获得分级组织中新邮件的数量,getUnreadMessageCount方法获得分级组织中未读邮件的数量 [*]根据MimeMessage的getFrom和getRecipients方法获得邮件的发件人和收件人地址列表,得到的是InternetAddress数组,根据InternetA

{丸の子} 389

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java发送简单邮件

因为工作需要,所以百度了找到了这个写邮件的代码 需要mail.jar包 import java.security.GeneralSecurityException; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Messagi...

兰陵笑笑生的博客 458

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java】Java中使用 Java Mail实现邮件服务

Java Mail是一个处理邮件服务的编程接口,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API,支持多种协议,如 SMTP、POP3 和 IMAP。它可以方便地执行一些常用的邮件传输。最近项目中刚好有邮件服务的需求,之前有用过但是一直没有总结,借此机会正好总结一下邮件服务的实现,如果大家项目中有邮件需求可以直接看本篇文章,后面有例子可以直接复制使用。

weixin_43219644的博客 9959
上一篇: JSP MySQL Tomcat Apache乱码解决一例
下一篇: Java/J2EE中文问题终极解决之道
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值