首页编程java编程java邮件功能需要什么包?java 发送邮件 需要哪些jar包

java邮件功能需要什么包?java 发送邮件 需要哪些jar包

编程之家2023-10-1199次浏览

大家好,今天小编来为大家解答以下的问题,关于java邮件功能需要什么包,java 发送邮件 需要哪些jar包这个很多人还不知道,现在让我们一起来看看吧!

java邮件功能需要什么包?java 发送邮件 需要哪些jar包

java 发送邮件 需要哪些jar包

使用JavaMail发送邮件需要用到mail.jar和activtion.jar两个包。

该类实现了较完整的邮件发送功能,包括以HTML格式发送,添加附件和抄送人。下面是具体的代码:

packagecn.cgw.util.mail;

java邮件功能需要什么包?java 发送邮件 需要哪些jar包

importjava.util.Properties;

importjavax.activation.DataHandler;

importjavax.activation.FileDataSource;

java邮件功能需要什么包?java 发送邮件 需要哪些jar包

importjavax.mail.Address;

importjavax.mail.BodyPart;

importjavax.mail.Message;

importjavax.mail.Multipart;

importjavax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.InternetAddress;

importjavax.mail.internet.MimeBodyPart;

importjavax.mail.internet.MimeMessage;

importjavax.mail.internet.MimeMultipart;

publicclassMail{

privateMimeMessagemimeMsg;//MIME邮件对象

privateSessionsession;//邮件会话对象

privatePropertiesprops;//系统属性

privatebooleanneedAuth=false;//smtp是否需要认证

//smtp认证用户名和密码

privateStringusername;

privateStringpassword;

privateMultipartmp;//Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**

*Constructor

*@paramsmtp邮件发送服务器

*/

publicMail(Stringsmtp){

setSmtpHost(smtp);

createMimeMessage();

}

/**

*设置邮件发送服务器

*@paramhostNameString

*/

publicvoidsetSmtpHost(StringhostName){

System.out.println("设置系统属性:mail.smtp.host="+hostName);

if(props==null)

props=System.getProperties();//获得系统属性对象

props.put("mail.smtp.host",hostName);//设置SMTP主机

}

/**

*创建MIME邮件对象

*@return

*/

publicbooleancreateMimeMessage()

{

try{

System.out.println("准备获取邮件会话对象!");

session=Session.getDefaultInstance(props,null);//获得邮件会话对象

}

catch(Exceptione){

System.err.println("获取邮件会话对象时发生错误!"+e);

returnfalse;

}

System.out.println("准备创建MIME邮件对象!");

try{

mimeMsg=newMimeMessage(session);//创建MIME邮件对象

mp=newMimeMultipart();

returntrue;

}catch(Exceptione){

System.err.println("创建MIME邮件对象失败!"+e);

returnfalse;

}

}

/**

*设置SMTP是否需要验证

*@paramneed

*/

publicvoidsetNeedAuth(booleanneed){

System.out.println("设置smtp身份认证:mail.smtp.auth="+need);

if(props==null)props=System.getProperties();

if(need){

props.put("mail.smtp.auth","true");

}else{

props.put("mail.smtp.auth","false");

}

}

/**

*设置用户名和密码

*@paramname

*@parampass

*/

publicvoidsetNamePass(Stringname,Stringpass){

username=name;

password=pass;

}

/**

*设置邮件主题

*@parammailSubject

*@return

*/

publicbooleansetSubject(StringmailSubject){

System.out.println("设置邮件主题!");

try{

mimeMsg.setSubject(mailSubject);

returntrue;

}

catch(Exceptione){

System.err.println("设置邮件主题发生错误!");

returnfalse;

}

}

/**

*设置邮件正文

*@parammailBodyString

*/

publicbooleansetBody(StringmailBody){

try{

BodyPartbp=newMimeBodyPart();

bp.setContent(""+mailBody,"text/html;charset=GBK");

mp.addBodyPart(bp);

returntrue;

}catch(Exceptione){

System.err.println("设置邮件正文时发生错误!"+e);

returnfalse;

}

}

/**

*添加附件

*@paramfilenameString

*/

publicbooleanaddFileAffix(Stringfilename){

System.out.println("增加邮件附件:"+filename);

try{

BodyPartbp=newMimeBodyPart();

FileDataSourcefileds=newFileDataSource(filename);

bp.setDataHandler(newDataHandler(fileds));

bp.setFileName(fileds.getName());

mp.addBodyPart(bp);

returntrue;

}catch(Exceptione){

System.err.println("增加邮件附件:"+filename+"发生错误!"+e);

returnfalse;

}

}

/**

*设置发信人

*@paramfromString

*/

publicbooleansetFrom(Stringfrom){

System.out.println("设置发信人!");

try{

mimeMsg.setFrom(newInternetAddress(from));//设置发信人

returntrue;

}catch(Exceptione){

returnfalse;

}

}

/**

*设置收信人

*@paramtoString

*/

publicbooleansetTo(Stringto){

if(to==null)returnfalse;

try{

mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));

returntrue;

}catch(Exceptione){

returnfalse;

}

}

/**

*设置抄送人

*@paramcopytoString

*/

publicbooleansetCopyTo(Stringcopyto)

{

if(copyto==null)returnfalse;

try{

mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));

returntrue;

}

catch(Exceptione)

{returnfalse;}

}

/**

*发送邮件

*/

publicbooleansendOut()

{

try{

mimeMsg.setContent(mp);

mimeMsg.saveChanges();

System.out.println("正在发送邮件....");

SessionmailSession=Session.getInstance(props,null);

Transporttransport=mailSession.getTransport("smtp");

transport.connect((String)props.get("mail.smtp.host"),username,password);

transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));

transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));

//transport.send(mimeMsg);

System.out.println("发送邮件成功!");

transport.close();

returntrue;

}catch(Exceptione){

System.err.println("邮件发送失败!"+e);

returnfalse;

}

}

/**

*调用sendOut方法完成邮件发送

*@paramsmtp

*@paramfrom

*@paramto

*@paramsubject

*@paramcontent

*@paramusername

*@parampassword

*@returnboolean

*/

publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword){

MailtheMail=newMail(smtp);

theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;

if(!theMail.setBody(content))returnfalse;

if(!theMail.setTo(to))returnfalse;

if(!theMail.setFrom(from))returnfalse;

theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;

returntrue;

}

/**

*调用sendOut方法完成邮件发送,带抄送

*@paramsmtp

*@paramfrom

*@paramto

*@paramcopyto

*@paramsubject

*@paramcontent

*@paramusername

*@parampassword

*@returnboolean

*/

publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringcopyto,Stringsubject,Stringcontent,Stringusername,Stringpassword){

MailtheMail=newMail(smtp);

theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;

if(!theMail.setBody(content))returnfalse;

if(!theMail.setTo(to))returnfalse;

if(!theMail.setCopyTo(copyto))returnfalse;

if(!theMail.setFrom(from))returnfalse;

theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;

returntrue;

}

/**

*调用sendOut方法完成邮件发送,带附件

*@paramsmtp

*@paramfrom

*@paramto

*@paramsubject

*@paramcontent

*@paramusername

*@parampassword

*@paramfilename附件路径

*@return

*/

publicstaticbooleansend(Stringsmtp,Stringfrom,Stringto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){

MailtheMail=newMail(smtp);

theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;

if(!theMail.setBody(content))returnfalse;

if(!theMail.addFileAffix(filename))returnfalse;

if(!theMail.setTo(to))returnfalse;

if(!theMail.setFrom(from))returnfalse;

theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;

returntrue;

}

/**

*调用sendOut方法完成邮件发送,带附件和抄送

*@paramsmtp

*@paramfrom

*@paramto

*@paramcopyto

*@paramsubject

*@paramcontent

*@paramusername

*@parampassword

*@paramfilename

*@return

*/

publicstaticbooleansendAndCc(Stringsmtp,Stringfrom,Stringto,Stringcopyto,Stringsubject,Stringcontent,Stringusername,Stringpassword,Stringfilename){

MailtheMail=newMail(smtp);

theMail.setNeedAuth(true);//需要验证

if(!theMail.setSubject(subject))returnfalse;

if(!theMail.setBody(content))returnfalse;

if(!theMail.addFileAffix(filename))returnfalse;

if(!theMail.setTo(to))returnfalse;

if(!theMail.setCopyTo(copyto))returnfalse;

if(!theMail.setFrom(from))returnfalse;

theMail.setNamePass(username,password);

if(!theMail.sendOut())returnfalse;

returntrue;

}

}

用java来发送带附件的邮件

邮件发送也是一个老生常谈的问题了,代码虽然简单,但是许多小伙伴对过程不太理解,所以还是打算和各位小伙伴聊聊这个话题。

邮件协议

我们经常会听到各种各样的邮件协议,比如 SMTP、POP3、IMAP,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题。

SMTP是一个基于 TCP/IP的应用层协议,江湖地位有点类似于 HTTP,SMTP服务器默认监听的端口号为 25。看到这里,小伙伴们可能会想到既然 SMTP协议是基于 TCP/IP的应用层协议,那么我是不是也可以通过 Socket发送一封邮件呢?回答是肯定的。

生活中我们投递一封邮件要经过如下几个步骤:

深圳的小王先将邮件投递到深圳的邮局

深圳的邮局将邮件运送到上海的邮局

上海的小张来邮局取邮件

这是一个缩减版的生活中邮件发送过程。这三个步骤可以分别对应我们的邮件发送过程,假设从 aaa@qq.com发送邮件到 111@163.com:

aaa@qq.com先将邮件投递到腾讯的邮件服务器

腾讯的邮件服务器将我们的邮件投递到网易的邮件服务器

111@163.com登录网易的邮件服务器查看邮件

邮件投递大致就是这个过程,这个过程就涉及到了多个协议,我们来分别看一下。

SMTP协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件于 SMTP服务器之间,以及 SMTP服务器与 SMTP服务器之间的通信规则。

也就是说 aaa@qq.com用户先将邮件投递到腾讯的 SMTP服务器这个过程就使用了 SMTP协议,然后腾讯的 SMTP服务器将邮件投递到网易的 SMTP服务器这个过程也依然使用了 SMTP协议,SMTP服务器就是用来收邮件。

而 POP3协议全称为 Post Office Protocol,译作邮局协议,它定义了邮件客户端与 POP3服务器之间的通信规则,那么该协议在什么场景下会用到呢?当邮件到达网易的 SMTP服务器之后, 111@163.com用户需要登录服务器查看邮件,这个时候就该协议就用上了:邮件服务商都会为每一个用户提供专门的邮件存储空间,SMTP服务器收到邮件之后,就将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3邮件服务器来完成。

最后,可能也有小伙伴们听说过 IMAP协议,这个协议是对 POP3协议的扩展,功能更强,作用类似,这里不再赘述。

发送QQ邮件准备工作

首先我们需要先登录 QQ邮箱网页版,点击上方的设置按钮:

然后点击账户选项卡:

在账户选项卡中找到开启POP3/SMTP选项,如下:

点击开启,开启相关功能,开启过程需要手机号码验证,按照步骤操作即可,不赘述。开启成功之后,即可获取一个授权码,将该号码保存好,一会使用。

然后我们需要 JavaxMail这个 jar包,小伙伴可以直接去Maven中央仓库下载,这里不再赘述。

发送

简单邮件

如果我们只发送一个简单的文本,发送方式就比较简单,整个过程可以分为三步如下:

第一步:构造 SMTP邮件服务器的基本环境

Properties properties= new Properties();

properties.setProperty("mail.host","smtp.qq.com");

properties.setProperty("mail.transport.protocol","smtp");

properties.setProperty("mail.smtp.auth","true");

properties.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

properties.setProperty("mail.smtp.port","465");

Session session= Session.getDefaultInstance(properties);

session.setDebug(true);

第二步:构造邮件

MimeMessage mimeMessage= new MimeMessage(session);

mimeMessage.addRecipients(Message.RecipientType.TO,"111@qq.com");//设置收信人

mimeMessage.addRecipients(Message.RecipientType.CC,"222@qq.com");//抄送

mimeMessage.setFrom("1510161612@qq.com");//邮件发送人

mimeMessage.setSubject("测试邮件主题");//邮件主题

mimeMessage.setContent("Hello,这是一封测试邮件","text/html;charset=utf-8");//正文

第三步:发送邮件

Transport transport= session.getTransport();

transport.connect("smtp.qq.com","333@qq.com","刚刚申请到的授权码");

transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());//发送邮件,第二个参数为收件人

transport.close();

复杂邮件

发送复杂邮件,第一步和第三步也是一样的,只有第二步构造邮件的过程比较麻烦,那么接下来给小伙伴们演示一个发送一封图文+两个附件的邮件。要发送复杂邮件,得先熟悉三个概念,如下:

MimeMessage:该类是个能理解MIME类型和头的电子邮件消息

MimeMultipart:该类定义了增加、删除以及获取邮件不同部分内容的方法

MimeBodyPart:该对象代表一个MimeMessage对象内容的一部分。每个MimeBodyPart被认为有两部分:MIME类型和匹配这个类型的内容

完整的邮件生成过程如下(第一步和第三步参考上文):

MimeMessage mimeMessage= new MimeMessage(session);

mimeMessage.addRecipients(Message.RecipientType.TO,"111@qq.com");//设置收信人

mimeMessage.addRecipients(Message.RecipientType.CC,"222@qq.com");//抄送

mimeMessage.setFrom("333@qq.com");//邮件发送人

mimeMessage.setSubject("测试邮件主题");//邮件主题

MimeMultipart mixed= new MimeMultipart("mixed");

mimeMessage.setContent(mixed);//设置整封邮件的MIME消息体为混合的组合关系

MimeBodyPart attach1= new MimeBodyPart();//创建附件1

MimeBodyPart attach2= new MimeBodyPart();//创建附件2

MimeBodyPart content= new MimeBodyPart();//创建邮件正文

mixed.addBodyPart(attach1);//将附件一添加到MIME消息体中

mixed.addBodyPart(attach2);//将附件二添加到MIME消息体中

mixed.addBodyPart(content);//将正文添加到消息体中

FileDataSource fds1= new FileDataSource(new File("C:\Users\sang\Desktop\1.png"));//构造附件一的数据源

DataHandler dh1= new DataHandler(fds1);//数据处理

attach1.setDataHandler(dh1);//设置附件一的数据源

attach1.setFileName("1.png");//设置附件一的文件名

//附件二的操作与附件一类似,这里就不一一注释了

FileDataSource fds2= new FileDataSource(new File("C:\Users\sang\Desktop\博客笔记.xlsx"));

DataHandler dh2= new DataHandler(fds2);

attach2.setDataHandler(dh2);

attach2.setFileName(MimeUtility.encodeText("博客笔记.xlsx"));//设置文件名时,如果有中文,可以通过MimeUtility类中的encodeText方法进行编码,避免乱码

MimeMultipart bodyMimeMultipart= new MimeMultipart("related");//设置正文的MIME类型

content.setContent(bodyMimeMultipart);//将bodyMimeMultipart添加到正文消息体中

MimeBodyPart bodyPart= new MimeBodyPart();//正文的HTML部分

bodyPart.setContent("<h1>Hello大家好,这是一封测试邮件<img src='cid:2.png'/></h1>","text/html;charset=utf-8");

MimeBodyPart picPart= new MimeBodyPart();//正文的图片部分

DataHandler dataHandler= new DataHandler(new FileDataSource("C:\Users\sang\Desktop\2.png"));

picPart.setDataHandler(dataHandler);

picPart.setContentID("2.png");

//将正文的HTML和图片部分分别添加到bodyMimeMultipart中

bodyMimeMultipart.addBodyPart(bodyPart);

bodyMimeMultipart.addBodyPart(picPart);

mimeMessage.saveChanges();

OK,Java Mail发送 QQ邮件就是这么简单,至于其他的如 163,sina等,写法类似,这里我就不赘述了。

昨天跟大家分享了Java极客技术知识星球的第一篇设计模式,作者就是今天文章的作者松哥,设计模式的分享文章下面已经展开了激烈的讨论,所以你还在等什么呢?欢迎到知识星球来,我们一起讨论,一起学习,一起进步。

Java收发邮件过程中具体的功能是怎么实现的

1.SMTP协议

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)

2.POP3协议

同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

下图用于演示两帐户相互发送邮件的过程

3.1JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API:Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

3.2发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。

接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。

3.3Session类

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

4.邮件组织结构相关的API

MimeMessage类表示整封邮件。

MimeBodyPart类表示邮件的一个MIME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

5.具体的例子程序

packagecn.edu.dlmu.send;

importjava.util.Properties;

importjavax.activation.DataHandler;

importjavax.activation.FileDataSource;

importjavax.mail.Message;

importjavax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.InternetAddress;

importjavax.mail.internet.MimeBodyPart;

importjavax.mail.internet.MimeMessage;

importjavax.mail.internet.MimeMultipart;

importjavax.mail.internet.MimeUtility;

publicclassSendMail{

publicstaticvoidmain(String[]args)throwsException{

Propertiesprop=newProperties();

//连接的邮件服务器的主机名

prop.setProperty("mail.smtp.host","smtp.sina.com.cn");

//发送邮件的协议

prop.setProperty("mail.transport.protocol","smtp");

//是否向邮件服务器提交认证

prop.setProperty("mail.smtp.auth","true");

//创建session

Sessionsession=Session.getInstance(prop);

session.setDebug(true);

//得到transport

Transportts=session.getTransport();

//连接邮件服务器

ts.connect("smtp.sina.com.cn","xxxx@sina.com","xxxxx");

//发送邮件

MimeMessagemessage=createMessage(session);

ts.sendMessage(message,message.getAllRecipients());

ts.close();

}

publicstaticMimeMessagecreateMessage(Sessionsession)throwsException{

MimeMessagemessage=newMimeMessage(session);

//设置邮件的基本信息

message.setFrom(newInternetAddress("xxxx@sina.com"));

message.setRecipient(Message.RecipientType.TO,newInternetAddress("1219070362@qq.com"));

message.setSubject("test");

//正文

MimeBodyParttext=newMimeBodyPart();

//设置charaset可以解决中文正文的乱码问题,内嵌可下载的图片

text.setContent("你好xxx,<imgsrc='c:/dog.jpg'/>测试成功!<br/><imgsrc='cid:aaa.jpg'/>","text/html;charset=gbk");

//图片1

MimeBodyPartimage=newMimeBodyPart();

image.setDataHandler(newDataHandler(newFileDataSource("src/88.jpg")));

image.setContentID("aaa.jpg");

//附件

MimeBodyPartattach=newMimeBodyPart();

DataHandlerdh=newDataHandler(newFileDataSource("src/javamail架包.jar"));

attach.setDataHandler(dh);

//解决文件中文乱码问题

attach.setFileName(MimeUtility.encodeText(dh.getName()));

//描述正文和图片的关系

MimeMultipartmp=newMimeMultipart();

mp.addBodyPart(text);

mp.addBodyPart(image);

mp.setSubType("related");

//描述正文和附件

MimeMultipartmp2=newMimeMultipart();

mp2.addBodyPart(attach);

//将正文封装为一个body

MimeBodyPartcontent=newMimeBodyPart();

content.setContent(mp);

mp2.addBodyPart(content);

mp2.setSubType("mixed");

message.setContent(mp2);

message.saveChanges();

returnmessage;

}

}

关于java邮件功能需要什么包的内容到此结束,希望对大家有所帮助。

javaee可以转什么,Java可以从事哪些岗位啊我想转行学Java了。java update失败 报什么异常?java8update161是什么