深入探讨JavaMail API的使用

javaMail API和JAR javaMail API和JAR包含:mail.jar及里面Message类、Transport类、Store类等api具体说明 立即下载
 问题一、我如何发送一封简单的信件?

  回答:我将在下面的例子中详细的讲解如何发送简单信件

import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendSimpleMail {
file://msgText是信件的正文,共有两行
static String msgText = "Dear Mr.FangZhou I’m a reader of your net!"
file://从命令行中读入三个参数,分别为smtpHost,from,to
public static void main(String args[])
throws Exception{
if (args.length != 3) {
System.out.println("usage: java SendSimpleMail ");
return;
}
String smtpHost=args[0];//SMTP服务器名
String from=args[1];//发信人地址
String to =args[2];//收信人地址
// 创建properties对象
Properties props = new Properties();
file://创建邮件服务器
props.put("mail.smtp.host", smtpHost);
file://取得默认的Session
Session session = Session.getDefaultInstance(props, null);
// 创建一条信息,并定义发信人地址和收信人地址
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
message.setRecipients(Message.RecipientType.TO, address);
message.setSubject("Hello,FangZhou");//设定主题
message.setSentDate(new Date());//设定发送时间
message.setText(msgText);//把前面定义的msgText中的文字设定为邮件正文的内容
file://发送邮件
Transport.send(message);
}
}

  问题二、如果我想在邮件中加上附件怎么办?

这也是一个相当好的问题,要加入附件的话就要使用MimeBodyPart来创建邮件,只需把上面的程序稍加修改就可以了,为了简单起见,我在这里只是使用了一条字符串作为附件内容来解释如何添加附件。

  file://msgText是信件的正文,共有两行

static String msgText = "Dear Mr.FangZhou I’m a reader of your net!"
file://msgAttachment是一段字符串作为附件
static String msgAttachment = "This is an attachment string!"
. . . . . . . . .
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(msgText); file://把前面定义的msgText中的文字设定为邮件正文的内容
file://创建附件部分
MimeBodyPart mbp2 = new MimeBodyPart();
file://使用setText(text, charset)来加入附件
mbp2.setText(msgAttachment, "gb2312");
file://创建Multipart
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// 添加 Multipart到Message中
message.setContent(mp);
file://发送邮件
Transport.send(message);
}

  问题三、我怎样从邮件服务器中获取邮件列表

  回答:其实实现这个问题的方法很简单

  1. JavaMail客户端通过创建一个默认的会话(Session)对象来开始一个邮件处理任务

  Session session = Session.getDefaultInstance(props, authenticator);

  2. 客户端使用Session对象的getStore方法来连接到默认到Store提供者。GetStore方法返回一个 Store 对象子类,它支持用户属性中定义的连接协议。

Store store = session.getStore();

  store.connect();

  3. 如果连接成功的话,客户端就能够列出Store中的可用的文件夹。然后我们就可以取得或时浏览特定的Message对象。

// 取得 INBOX 文件夹
Folder inbox = store.getFolder("INBOX");
// 打开 INBOX 文件夹
inbox.open(Folder.READ_WRITE);
Message message[] = inbox.getMessage();
for(int i =0;filenumber=message.length;i < filenumber;i ++)
{
System.out.println(“第”+i +”封信:”+message[i ].getFrom()[0]+” ”+message[i ].getSubject());
}
...
...

   4. 最后,客户端关闭所有打开的文件夹,并关闭所有Store。

inbox.close(); // 关闭INBOX
store.close(); // 关闭Store

  问题四:我想删除邮箱中的某些邮件,该怎么办呢?

  在邮件服务器上,我们如果想删除某封信的话,只需调用setFlag()来设置Flags.Flag.DELETE为真即可。

  例如:Message message = folder.getMessage(1);
message.setFlag(Flags.Flag.DELETED, true); file://设置Flags.Flag.DELETE为真。
// 检查这封信的DELETED标记是否设置
if (message.isSet(Flags.Flag.DELETED))
System.out.println("这封信已被删除,请返回!");

  问题五:我想知道我的邮箱中有多少封信我读过了有多少封信我没有读过,我该怎么办?

  我们知道,Folder对象提供了三个方法,getMessageCount,getNewMessageCount和getUnreadMessageCount。GetMessageCount方法显示邮箱中总共有多少封信,getNewMessageCount显示邮箱中新邮件的封数;getUnreadMessageCount显示邮箱中已读邮件的封数。利用这三个方法,我们可以很容易的看到邮箱中有多少封信我们已经读到过,有多少没有读。见下面的程序:

import javax.mail.*;
import javax.mail.internet.*;
public class CheckMyMailBox{
public class void main( )
throws Exception{
Properties props= new
// 创建properties对象
Properties props = new Properties();
file://获得Session
Session session = Session.getDefaultInstance(props, null);
file://获得Store
Store store=session.getStore(“pop3”);s
store.connect(Pop3Host,username,password);
file://获得folder,打开INBOX
Folder inbox= store.getFolder(“INBOX”);
file://以只读方式打开邮件夹
inbox.open(Folder.READ_ONLY);
file://取得邮箱中总共有多少封信
int numberOfTotal = inbox.getMessageCount();
file://取得邮箱中未读过的信
int numberOfUnread= inbox.getUnreadMessageCount();
System.out.println(“您的邮箱中共有”+ numberOfTotal+”封邮件,其中有”+ numberOfUnread+”封没有读过”);
file://关闭连接
inbox.close();
store.close();

  问题六:我的邮件中有一个附件,我怎么把它打开呢?

  说到邮件中的附件,我不得不说一说Multipart类,Multipart类是Message类的子类,提供了在邮件中加入附加的实现方法。一个多部分邮件是一个内容类型(content-type)被设置为multipart的Message对象。Multipart类是一个容器类,包含Bodypart类型的对象。Bodypart对象是一个Part接口的实例,它既包括一个新的Multipart容器对象,又包括一个DataHandler对象。

  下图显示了一个Multipart邮件的结构。

  下图显示了一个典型的Multipart邮件的嵌套

  

  当邮件中有附件时,邮件的内容就是Multipart而不是我在前面所说的Part类型了。我们需要取得Multipart的每一部分并根据以需要和内容进行处理。现在让我们看一看在程序上是如何实现的:

import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class getAttachment{
public static void main(String args[])
{
String host=args[0];
String username=args[1];
String userpassword=args[2];
n=3;//为了简单起见,我默认第三封信为有附件的邮件
Session session =Session.getInstance(new Properties(),null);
Store store=session.getStore("pop3");
store.connect(host,username,userpassword);
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[]=folder.getMessage();
Object content=message[n].getContent();
if (content instanceof Multipart)
{
handleMultiPart((Multipart)content);
}
else
{
handlePart(message[n]);
}
folder.close();
store.close();
}
public static void handleMultiPart(Multipart multipart)
{
for(int i=0,i
{
handlePart(multipart.getBodyPart(i));
}
}
public static void handlePart(Part part)
{
String disposit=part.getDisposition();
String conType=part.getContentType();
if(disposit==null){//如果只有正文
System.out.println("没有:"+conType);
file://检查是否为普通邮件
if ((conType.length()>=10)&&(conType.toLowerCase().substring(0,10).equals("text/plain"))){
part.writeTo(System.out);
}
else {
file://可能为HTML格式的邮件,但是本文还不涉及这方面的内容故不予以考虑。
System.out.println("其它各是的正文:"+conType);
part.writeTo(System.out);
}
}
else if (disposit.equals(Part.ATTACHMENT))//否则说明邮件中有附件
{
System.out.println("附件:"+part.getFileName()+:conType);
storeFile(part.getFileName(),part.getInputStream());
}
else {
System.out.println("其它:"+disposit);
}
}
public static void storeFile(String fileName,InputStream inputstream)//保存文件
{
File file=new File(fileName);
for(int i=0;file.exists();i++)
{
file= new File(fileName+i);
}
FileOutputStream fileoutputstream =new FileOutputStream(file);
BufferedOutputStream bufferedoutputstream =new BufferedOutputStream(fileoutputstream);
BufferedInputStream bufferedinputstream =new BufferedInputStream(BufferedInputStream);
int n;
while ((n=bufferedinputstream.read())!=-1)
{
bufferedoutputstream.write(n);
}
bufferedoutputstream.flush();
bufferedoutputstream.close();
bufferedinputstream.close();
}
}

半导体工艺仿真:离子注入工艺仿真_(8).损伤和缺陷仿真 离子注入工艺在半导体制造中是一个重要的步骤,用于在半导体材料中引入特定的掺杂剂。然而,离子注入过程中不可避免地会产生损伤和缺陷,这些损伤和缺陷会直接影响器件的性能和可靠性。因此,对离子注入工艺中的损伤和缺陷进行仿真研究是必不可少的。本节将详细介绍如何使用仿真软件对离子注入过程中的损伤和缺陷进行建模和分析。 阅读详情

相关推荐

GQA数据集介绍

GQA,这是一个用于真实世界视觉推理和组合问答的新数据集。2200万个不同的推理问题,所有这些问题都带有表示其语义的功能程序。答案分布受到严格控制。11.3万张图像、2200万个问题,推理能力有对象和属性识别、传递关系跟踪、空间推理、逻辑推理和比较。

qq_56551150的博客 2954

javaemail中getUnreadMessageCount()为什么的不到未读邮件数

这段时间在做一个OA系统涉及到与邮件系统对接问题 结果在网上看到了N篇关于 如何获得未读邮件数的帖子 基本上都是这样来得到:(核心代码如下) Store store = session.getStore("pop3");store.connect(Pop3Host, username, password); folder = (POP3Folder) store.getF...

weixin_34409741的博客 880

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 839

关于javax.mail 错误:java Failed to load IMAP envelope的解决方案

只需要判断一下 if(rootSend.getMessageCount() > 0) 这个地方的值就能解决这个问题。

WoNiuDeXiaYiYe的博客 1031

Xilinx FPGA MultiBoot实战:7Series与UltraScale的SPI Fallback配置详解

本文深入解析了Xilinx FPGA的MultiBoot(多启动)与Fallback(回退)功能,针对7系列与UltraScale/UltraScale+系列,提供了从约束文件编写、看门狗集成到镜像烧录的完整实战配置指南。文章重点对比了两个系列在SPI Fallback配置上的关键差异与注意事项,旨在帮助工程师构建高可靠、永不宕机的FPGA系统。

weixin_29197051的博客 547

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!!

本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法)

rousseaou8的博客 8万+

JavaMail API的使用,一看就会的那种

文章目录一、概述二、邮件协议2.1 什么是SMTP?2.2 什么是IMAP?2.3 什么是POP3?三、核心类3.1 Session3.2 Message3.3 Address3.4 Authenticator3.5 Store3.6 Transport3.7 Folder四、邮件操作4.1 准备工作4.2 发送邮件4.2 收取邮件4.3 回复邮件4.5 转发邮件4.6 删除邮件4.7 邮件文件夹管理 一、概述   JavaMail API 顾名思义,提供给开发者处理电子邮件相关的编程接口,它是Sun发布的

独泪了无痕 2053

【黑马点评优化】3-压测秒杀接口,算出性能塌陷区,之后用sentinel实现秒杀接口限流

【黑马点评优化】3-压测秒杀接口,算出性能塌陷区,之后用sentinel实现秒杀接口限流

m0_52031708的博客 3569

用javaapi发送邮件

关键字: javamail, 邮件1、MimeMessage的包装类 Java代码 public class SimpleMessageWraper {       private Session session;       private MimeMessage mimeMessage;       private Multipart multipart

jhrokin的专栏 1277

论文浅读之PIP-Net: Patch-Based Intuitive Prototypes for Interpretable Image Classification

这篇文章的主要贡献包括:1 提出了一种新型的可解释图像分类模型PIP-Net,它基于原型部分学习可解释的原型,实现内置解释性。2 PIP-Net采用自监督学习的新正则化方法,学习原型之间的相似性,使得 latent 空间中的相似性能更好地与人类视觉感知相一致,从而减小了所谓的语义差距。3 PIP-Net可解释为一个稀疏的打分表,它可以检测图像是否属于任何类,或是否属于多个类。它也可以对OOD数据进行分类并说“我没有看到过这个”。

qq_49370210的博客 1791

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 757

简述JavaMail中的MimeMessage,IMAPMessage和SMTPMessage

MimeMessage,IMAPMessage和SMTPMessage是处理电子邮件在不同环境中常用的类,它们分别属于Java邮件API中的一部分。这些类用于创建、发送和接收电子邮件,每个类都有其特定的用途和功能。

weixin_45509406的博客 1859

315、弱电基础知识介绍

常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。

qq_43416206的博客 1365

JavaMail发送和接收邮件

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

琼华 4518

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaMail API 详细分解

在使用Spring框架的过程中,它的优势之一就是在于跟其他一些技术的整合,如JavaMail 、任务调度、缓存策略等技术。今天就Java Mail详细阐述。JavaMailAPI是被设计为与协议无关的,但是目前我们并不能克服这些协议的束缚。了解JavaMail之前,需要详细了解几个邮件协议,SMTP POP IMAP MIME,现就这些协议详细分析如下: 1.S...

angjiu8534的博客 157

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JavaMail发送和接收邮件API(详解)

为什么80%的码农都做不了架构师?>>> ...

weixin_34406086的博客 2522

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JavaMail(JAVA邮件服务) API详解

一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。从另外一个角度来

把握自己。 1940

邮件原理与JavaMail开发

1、Java邮件开发介绍 为什么要学习javamail开发 现在很多WEB应用在开发时都需要集成邮件发送功能,例如:  给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail。 给过生日的注册会员自动发送一封表示祝贺的E-Mail 。 将网站的最新活动信息通过E-Mail发送给所有的注册会员。 等等 …... 这些功能的实现都需要软件开发人员在开发WEB应用中编写相应的邮件处理程

编程学院派 2330

JavaMail

在Java EE应用程序中,经常需要发送E-mail。Java EE框架为应用提供了JavaMail接口,通过JavaMail相关的接口可以读取邮件服务器的邮件,并且可以完成邮件的发送过程。 本章的主要内容包括: — E-mail体系结构 — JavaMail API — 如何使用JavaMail API发送邮件 — 如何使用JavaMail API接收邮件 29.1 E-mai...

lzhw1985的专栏 227

使用JavaMail发送邮件

SMTP:简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)由RFC821定义,它定义了发送邮件的机制,在JavaMail环境中,基于JavaMail的程序将和因特网服务供应商ISP(internet Service Provider ’ s)SMTP服务器通信.SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得.  

xjh1991xjh的专栏 1466

15.javamail

1.介绍: Java Mail API的开发是SUN为Java开发者提供公用API框架的持续努力的良好例证。提倡公用框架,反对受限于供应商的解决方案,充分预示着一个日益开放的开发环境的建立。   Java Mail API的结构本身证明了它的开发者的基本目标之一--软件开发的工作量应该取决于应用程序本身的复杂程度以及开发者所要求的控制程度。换句话说,Java Mail API尽可能...

勇往直前 212

JavaMail API简介(一)

一、JavaMail API简介 JavaMail API 是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序 (Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称 MTA)程序那样可以传送、递送、转发邮件。从另外一个角

268

JavaMail API细节详细解析大全

JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。让我们看看JavaMail API是如何提供信息访问功能的吧!Ja

neo_liu0000的专栏 5622

SpringBoot4+Vue3汽车用品交易小程序:从页面到订单核心链路拆解

在电商系统开发中,一个能真正商用的交易平台绝非“商品展示页”那么简单,围绕商品、购物车、订单、支付、库存与售后的完整业务链路才是核心。以SpringBoot4+Vue3+微信小程序构建的汽车用品交易小程序,是典型的三端协同项目——后端提供接口与状态流转,Vue3搭建运营管理后台,小程序面向C端用户完成选品、下单与支付。这类系统需要重点处理SKU多规格、车型适配、订单状态机、库存扣减一致性、微信支付回调幂等等容易被忽略的工程细节,其技术价值在于通过清晰的分层架构和事务设计,让交易流程稳定可追溯。该架构常见于汽

weixin_34396103的博客 428
上一篇: HTMLParser包的过滤分析
hjpengjava
博客等级 码龄18年 5粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值