JavaEE5学习笔记04-JavaMail使用总结
[原创精品] JavaMail 课堂笔记 (一)
![[原创精品] JavaMail 课堂笔记 (一)](https://img.taocdn.com/s3/m/116071c76137ee06eff91875.png)
1.课程目标a.用程序代码生成一封带附件和内嵌图片的复杂邮件b.用自己的程序代码将复杂邮件发送出去c.一些特殊的经验和高级应用a.中文名的邮件附件的乱码问题b.Tomcat中JavaMail支持与冲突问题c.SMTP邮件服务器程序的开发2.为什么要学习邮件开发a.曾经很赚钱的技术丁磊早期就是靠邮件起家b.对找工作有帮助c.许多办公自动化项目(OA)中都要附带发送邮件的功能,比如我们要给某人发生通知,使用OutLook等手工方式就不合适,需要提高工作效率,让工作能够自动化。
d.在许多网站项目中也都需要附带发送邮件的功能,即要求软件开发人员在WEB应用中编写相应的邮件处理程序3.如何学习邮件开发学习邮件开发包括两大方面:a.发送与接收邮件b.创建与解析邮件内容1.电子邮件的一些基本常识a.邮件服务器b.电子邮件c.邮件客户端软件d.邮件传输协议e.电子邮件的传输过程2. 邮件服务器A.要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。
Internet上架设了大量的电子邮件服务器,例如,,,等网站提供了面向公共免费的电子邮件服务器,许多公司也提供了面向内部员工的电子邮件服务器,这些电子邮件服务器彼此之间都可以发送和接收电子邮件。
B 电子邮件服务器主要提供以下功能:①.接收用户投递的邮件②.将用户投递进来的邮件转发给目标邮件服务器③.接收其他邮件服务器转发来的邮件并把邮件存储到其管理的用户邮中④.为前来读取邮件的用户提供读取服务C.邮件服务器按通讯协议可以划分为两种类型:a. SMTP服务器b. POP3/IMAP服务器D.E. SMTP服务器用于发送邮件和接收外面发送给本地用户的邮件,它相当于现实生活中的邮局的邮件接收部门(可接收普通用户要投出的邮件和其他邮局投递进来的邮件)F. POP3/IMAP邮件服务器用于帮助用户读取SMTP服务器接收进来的该用户的邮件,它相当于专门为前来取包裹的用户提供服务的部门G.收与取的区别,为用户取邮件和替用户收邮件是两回事。
JavaWeb(十三)使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)

JavaWeb(⼗三)使⽤javamail进⾏发送邮件,(使⽤QQ,163,新浪邮箱服务器) 加油加油。
--WZY⼀、发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协议,默认端⼝,25 POP3:Post Office Protocol 3,即邮局协议,接收邮件的协议,默认端⼝,110 知道了这两个协议,下⾯来说说邮件发送和接收的原理图,分两种,相同邮件(QQ邮箱给QQ邮箱)和不同邮件(QQ邮箱给163邮箱)是不⼀样的。
解释: 为了⽅便起见,将新浪邮箱,list@称为⽤户A,将搜狐邮箱,wangwu@ 称为⽤户B ⽤户A(新浪邮箱,list@)给⽤户B(搜狐邮箱,wangwu@)发送⼀封邮件,那么整个过程就为图中的实线部分,⽤户A通过OutLook(浏览器或者客户端)登录⾃⼰的邮箱帐号,编写邮件,使⽤Smtp协议发送给Sina的邮件服务器中的Smtp服务器(专门⽤来发送的服务器),然后在通过SMTP协议,传输给Sohu的邮件服务器中的Smtp服务器,然后通过Sohu的Smtp服务器将邮件发送给⽤户B的存储设备进⾏存储(每个⽤户都会有⼀个存储空间⽤来存储邮件的),到这⾥,⽤户A就相当于发送成功了,因为已经到达了⽬的地,如果B⽤户需要查看邮件内容,必须通过POP3服务器将从⾃⼰的存储设备中拿到,然后返回到浏览器或者客户端中显⽰。
⽤户B给⽤户A发送⼀封邮件,那么整个过程就为图中的虚线部分,是和A给B发⼀样的步骤 ⽤户A给⼀个同样使⽤新浪邮箱的⽤户C发送⼀封邮件,那么其过程就简单的多了,先通过Smtp服务器,然后smtp服务器会将其发送到⽤户C的存储设备上,A发送邮件就成功了,⽤户C要显⽰⾃⼰邮箱中的邮件,那么就通过POP3服务器从⾃⼰存储设备中拿取所有邮件进⾏查看。
⼆、通过Java代码实现发送邮件 2.1、准备jar包 核⼼:mail.jar 依赖:activation.jar,邮件需要发送附件时使⽤ 2.2、使⽤163邮箱发送邮件 2.2.1、⾸先在163邮箱中注册⼀个帐号。
JavaMail的使用之邮件发送

JavaMail的使用之邮件发送--------------------------------------------------------------------------------2005-09-16 来源:JAVA资源网作者:郝从平近日心情不爽,项目做烦了,就不想做项目了,停了下来,想做些JavaMail的开发。
上网看了些教程,发现网上的文章虽然很多,但大都有些问题,包括:有些文章写得很全,但感觉太纷繁复杂,没有个提纲,感觉很乱。
有些文章没有把问题写全,对于很多情况,程序能运行,但邮件就是发不了。
对于JavaMail,最基础的功能就是邮件的发送和接收,在这里,我先讲一讲邮件的发送。
在写具体的程序前,先讲一些概念。
1.邮件的发送:如果你的邮件地址是a@,而你要用这个邮箱发送一封邮件到to@,这个发送过程是怎样的呢,你以为是先连接到这服务器上,然后把邮件发送出去吗?其实不然。
最初,你需要连接到服务器上,当然这个连接可能需要认证,然后是发送邮件到服务器上,关闭连接。
在上,你所发送的邮件进入发送队列中,轮到你要发送的邮件时, 主机再联系,将邮件传输到服务器上。
2.一些垃圾邮件的发送:在垃圾邮件中,可能大部分的发件人的地址都是假的,这是怎么回事呢?实际上在发送这些垃圾邮件的时候,这里的有些特别,可能不需要对用户进行认证,也可能发送垃圾邮件的人本来就控制着服务器,然后控制着向其他服务器,如,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。
发送邮件主要包括3个部分:创建连接,创建邮件体,发送邮件JavaMail中,是使用会话(Session)来管理连接的。
创建一个连接,就需要创建一个会话。
在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。
在我们使用Hotmail等邮件工具的时候,就要设置”SMTP服务器身份验证”,也就是这里的会话的认证。
首先,创建一个连接属性。
Properties props = new Properties();props.put("mail.smtp.host",""); //设置smtp的服务器地址是props.put("mail.smtp.auth","true"); //设置smtp服务器要身份验证。
JavaMail开发

JavaMail开发<精通J2EE网络编程 12章>用Java 开发的各种应用系统中经常要用到收发邮件的功能,JavaMail提供了丰富的API供程序员使用。
本章将首先讲述JavaMail 中使用的邮件协议及基本的概念,再介绍与JavaMail开发相关的类及其常用方法,然后编写发送和接收E-mail的程序。
本章中的所有实例都是利用已配置好邮件服务器的服务来发送和接收电子邮件,而并非要在本地服务器上配置邮件服务器。
12.1 JavaMail基础12.1.1 邮件协议在Internet中,常用的与邮件操作相关的协议有3个——SMTP、POP、IMAP。
在学习JavaMail之前先学习Internet中实现邮件传输的邮件协议是学好JavaMail开发的基础,因为邮件的传送要依赖于具体的传输协议。
简单邮件传输协议(simple mail transfer protocol,SMTP)协议是邮件服务器之间相互发送邮件的协议,邮件客户机也可以使用它向服务器发送邮件。
一个邮件先被传送到邮件服务器,再被邮件服务器分发到一个或多个目标邮件服务器。
邮局协议第3版(post office protocol version 3,POP3)协议用于从邮件服务器检索以得到新的邮件,目前常用的就是这个协议的第3版,大量的客户机从邮件服务器接收邮件就是使用POP3协议。
因特网消息访问协议(internet messager access protocol,IMAP)协议比POP3功能更加强大,它可在接收邮件时,把邮件保存在邮件服务器中,既可在服务器中保留邮件也可把邮件下载下来。
基于此协议的邮件服务器需要长期保存邮件,因此需要大量的硬盘空间以储存众多用户的邮件。
12.1.2 JavaMail概述JavaMail 对SMTP、POP3、IMAP提供了支持,封装了电子邮件功能中的邮件对象、发送功能、身份认证、接收等。
然而,Weglogic 8.1中仅包含了JavaMail1.1.3,它仅支持SMTP和IMAP。
JavaMail概述

JavaMail概述J avaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。
它是Sun 公司发布的用来处理email的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。
用户可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
Java Mail是JavaEE平台提供的邮件API。
使用这套API,可以轻松实现邮件的创建,发送和接受。
1.什么是E-mailE-mail是用户间或应用程序间交换信息的Internet标准。
每个用户都有自己的网上邮箱,发送方把信息发送到自己的网上信箱,并声明信息的接收方;该信箱所在的“邮局”会把信息发送到接收方的“邮局”,接收方从接收方的“邮局”中自己的信箱获取信息。
这样就完成了信息从发送方到接收方的传递。
所以,要发送或者接收邮件首先应该有自己的邮箱。
E-mail消息可以包含普通文本,也可以包含更为复杂的多媒体数据类型和图像声音等。
这样,用户就可以交换各种各样的信息。
每个E-mail消息的头信息中都包含消息的发出者、发送的目的地和其他相关信息。
2 E-mail体系结构要完成消息的交互,需要几方面的支持:邮件发送客户端程序、邮件接收客户端程序、邮件发送服务器和邮件接收服务器,此外,还需要相关的通信协议。
邮件发送客户端程序和邮件接收客户端程序可以是相同的,例如经常使用的微软的Outlook既可以发送邮件,也可以接收邮件。
邮件发送服务器和邮件接收服务器也可以是相同的服务器。
在与邮件服务器交互的过程中,主要完成两个动作,把邮件发送到邮件服务器,以及从邮件服务器读取邮件。
邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议。
发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMTP。
邮件接收方从接收方邮件服务器接收邮件,使用POP3协议或者IMAP协议。
3 E-mail相关的协议简单邮件传输协议(SMTP)在邮件发送方把邮件发送到发送方邮件服务器的时候,需要用到简单邮件传输协议(Simple Mail Transport Protocol,简称SMTP),发送方邮件服务器把邮件发送到接收方邮件服务器的时候,也要用到SMTP。
JAVA MAIL应用五 (详解PROPERTIES SESSION)

1.Properties(属性对象)由于JavaMail需要和邮件服务器进行通信,这就要求程序提供许多诸如服务器地址、端口、用户名、密码等信息,JavaMail通过Properties对象封装这些属性西信息。
如下面的代码封装了两个属性信息:Properties props=new Properties();props.put("mail.smtp.host","");props.put("mail.smtp.auth","true");针对不同的的邮件协议,JavaMail规定了服务提供者必须支持一系列属性,下表是针对SMTP 协议的一些常见属性(属性值都以String类型进行设置,属性类型栏仅表示属性是如何被解析的):属性名属性类型说明mail.stmp.host String SMTP服务器地址,如mail.stmp.port int SMTP服务器端口号,默认为25mail.stmp.auth boolean SMTP服务器是否需要用户认证,默认为false er String SMTP默认的登陆用户名mail.stmp.from String默认的邮件发送源地址mail.stmp.socketFactory.class String socket工厂类类名,通过设置该属性可以覆盖提供者默认的实现,必须实现.SocketFactory接口mail.stmp.socketFactory.port int指定socket工厂类所用的端口号,如果没有规定,则使用默认的端口号mail.smtp.socketFactory.fallbackboolean设置为true时,当使用指定的socket类创建socket失败后,将使用.Socket创建socket,默认为truemail.stmp.timeout int I/O连接超时时间,单位为毫秒,默认为永不超时其他几个协议也有类似的一系列属性,如POP3的mail.pop3.host、mail.pop3.port以及IMAP 的mail.imap.host、mail.imap.port等。
JavaMail接收与发送邮件
JavaMail接收与发送邮件一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。
邮件头包含的内容有:1.from字段--用于指明发件人2.to字段 --用于指明收件人3.subject字段 --用于说明邮件主题字段 -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁5.bcc字段 -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁邮件体指的就是邮件的具体内容。
二、MIME协议简单介绍在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。
MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。
通常我们把MIME协议描述的邮件称之为MIME邮件。
MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
三、使用JavaMail创建邮件和发送邮件JavaMail创建的邮件是基于MIME协议的。
因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。
3.1、JavaMail API的简单介绍3.2、创建邮件发送测试项目3.3、发送一封只包含文本的简单邮件1package me.gacl.main;23import java.util.Properties;4import javax.mail.Message;5import javax.mail.Session;6import javax.mail.Transport;7import javax.mail.internet.InternetAddress;8import javax.mail.internet.MimeMessage;910/**11* @ClassName: Sendmail12* @Description: 发送Email13* @author: admin14* @date: 2015-1-12 下午9:42:5615*16*/17public class Sendmail {1819/**20* @param args21* @throws Exception22*/23public static void main(String[] args) throws Exception {2425Properties prop = new Properties();26prop.setProperty("mail.host", "");27prop.setProperty("mail.transport.protocol", "smtp");28prop.setProperty("mail.smtp.auth", "true");29//使用JavaMail发送邮件的5个步骤30//1、创建session31Session session = Session.getInstance(prop);32//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态33session.setDebug(true);34//2、通过session得到transport对象35Transport ts = session.getTransport();36//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
Java基于JavaMail实现向QQ邮箱发送邮件
Java基于JavaMail实现向QQ邮箱发送邮件最近项⽬在做新闻爬⾍,想实现这个功能:爬⾍某个页⾯失败后,把这个页⾯的 url 发到邮箱。
最终实现的效果图如下,后期可以加上过滤标签、失败状态码等,⽅便分类搜索异常。
开发⼈员可以根据邮件⾥的 url 和堆栈信息,分析爬⾍失败的原因。
是不是服务器 down 了?还是爬⾍的 Dom 解析没有解析到内容?还是正则表达式对于这个页⾯不适⽤?开启SMTP服务在 QQ 邮箱⾥的设置->账户⾥开启 SMTP 服务注意开启完之后,QQ 邮箱会⽣成⼀个授权码,在代码⾥连接邮箱使⽤这个授权码⽽不是原始的邮箱密码,这样可以避免使⽤明⽂密码。
⽹上查了⼀下例⼦,根据这篇⽂章 Java Mail(⼆):JavaMail介绍及发送⼀封简单邮件的⽰例代码。
Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要⾝份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");Session session = Session.getInstance(props);//邮件内容部分Message msg = new MimeMessage(session);msg.setSubject("seenews 错误");StringBuilder builder = new StringBuilder();builder.append("url = " + "/never_cxb/article/details/50524571");builder.append("页⾯爬⾍错误");builder.append("\n data " + TimeTool.getCurrentTime());msg.setText(builder.toString());//邮件发送者msg.setFrom(new InternetAddress("**发送⼈的邮箱地址**"));//发送邮件Transport transport = session.getTransport();transport.connect("", "**发送⼈的邮箱地址**", "**你的邮箱密码或者授权码**");transport.sendMessage(msg, new Address[] { new InternetAddress("**接收⼈的邮箱地址**") });transport.close();但是报错了DEBUG SMTP: AUTH LOGIN command trace suppressedDEBUG SMTP: AUTH LOGIN failedException in thread "main" javax.mail.AuthenticationFailedException: 530Error: A secure connection is requiered(such as ssl). More information at /cgi-bin/help?id=28因为⽰例代码是⽤的163邮箱,⽽笔者是 QQ 邮箱,看 Log 分析是 QQ 邮箱需要 SSL 加密。
java课程设计总结心得体会【5篇】
java课程设计总结心得体会【5篇】java课程设计总结心得体会(篇1)一、实训项目简易记事本二、实训目的和要求本次实训是对前面学过的所有面向对象的编程思想以及JAVA WEB编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写采用JSP+Servlet+JavaBean技术框架的应用系统综合实例,以掌握Java WEB开发技术。
具体要求有以下几点:1. 问题的描述与程序将要实现的具体功能。
2. 程序功能实现的具体设计思路或框架,并检查流程设计。
3. 代码实现。
4. 设计小结。
三、实训项目的开发环境和所使用的技术基于J2SE基础,利用MyEclipse 8.5以上版本的集成开发环境完成实训项目,界面友好,代码的可维护性好,有必要的注释和相应的文档。
四、实训地点、日程、分组情况:实训地点:4栋303机房日程:第一阶段:1.班级分组,选定课题,查阅相关资料半天2.划分模块、小组成员分工半天3.利用CASE工具进行系统设计和分析,并编制源程序 5天第二阶段:上机调试,修改、调试、完善系统 2天第三阶段:撰写、上交课程设计报告,上交课程设计作品源程序(每人1份)2天五、程序分析功能模块说明六、程序设计及实现1、实现弹出菜单(JpopupMenu)2、设置字型,字体大小,字体颜色3、实现自动换行七、实训总结通过3天的实训,虽然实训的时间不长,但是总体上收获是很大的,我们的java课程学到的只是java和皮毛,一开始我还没有信心完成。
我仔细看了书上的代码之后。
对计事本有了一个大体的了解,在初训的实候知道自己应该做一个什么样的计事本了,在实训的过程中也遇到了不少困难,通过查API文档和看书,解决了问题,在写到字符的查找的替换时后,用到了上课时学到的知识,对字体的风格的保存里面的颜色分离和还原方法,是通过查API文档获得的,现在我所写的计事本只实现在一些基本功能。
Properties props = new Properties(); props.setProperty("java.naming.factory.initial“,"org.jnp.interfaces.Nam ingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); props.setProperty("java.naming.factory.url.pkgs“,"org.jboss.naming"); ctx = new InitialContext(props); System.err.println("** Unable to connect to the server");
InternetAddress
表示电子邮件地址; InternetAddress dest=new InternetAddress(“me@”); 使用该InternetAddress,可以将Message对象 发送到指定的邮箱;
msg.setRecipient(Message.RecipientType.T O,dest); //将电子邮件中的To:字段设置成dest指定的地址
JavaMail API
javax.mail.Session javax.mail.internet.InternetAddress javax.mail.Message javax.mail.Transport
Session
定义全局和每用户邮件相关属性——用于定义客户端和服 务器的交互方式; JavaMail Session
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaEE5学习笔记04-JavaMail使用总结
刘岩
Email:suhuanzheng7784877@
1.JavaMail简介
其实利用JavaMail API发送邮件本身没什么,在Java Web系统中也可以将自
的Foxmail。
因为它确实为您屏蔽了底层的通讯协议、发送细节等等。
2.常用接口
JavaMail常用的接口有如下几个
1.javax.mail.Session:代表一次邮件会话。
2.javax.mail.Transport
3.
此类用于邮件的读取、写、监视、查找等等操作
如下操作
4.javax.mail.Folder
用于组织邮件,代表邮件系统的一个文件夹。
5.javax.mail.MimeMessage
实际的邮件对象
它下属性
bte[] content:邮件内容的字节数组
InternetHeaders header:邮件的文件头对象
它还有如下方法
Void addFrom():设置发件人
Void addHeader():设置邮件头信息
Void addRecipients():增加收件地址
Address[] getFrom():返回邮件发件人地址列表
Void setContent():设置Email的内容
6.javax.mail.Address
制定人发件人、收件人地址,它也是一个抽象类,他有一个InternetAddress 子类。
7.javax.mail.Multipart
用于保存电子邮件的内容的容器,它定义了添加、删除、获得电子邮件内容的方法。
他也是抽象类,有一个子类叫做MimeMultipart。
8.javax.mail.BodyPart
以上代码示例出现了MimeBodyPart,他是BodyPart的子类,代表邮件内容的一部分,既可以代表邮件正文、也可以代表邮件的附件。
上面是描绘了一个普通的字符串。
9.javax.activation.DataHandler
10.javax.activation.FileDataSource
一般是附件文件对象,可以用于给邮件增加附件。
上面的代码中也就是增加了一个文件附件
11.javax.activation.URLaSource
代表一个url的远程资源
3.发送邮件实例
还是来个实例代码实在点
发送邮件的步骤就是:
1:建立邮件Session会话
2:通过会话创建MimeMessage对象
3:对MimeMessage对象设置属性,内容、主题、附件等等
4:用Trasport发送邮件4.
理异常,查询了相关资料是因为jre的问题,需要自己捕获异常后自己处理一下,直接将邮件的内容转成字节数组,之后再转成字符串。
5.和JBoss容器配合使用
如果您是用商业化的服务器集成JavaMail,则可以通过JNDI的方式直接获取应用容器中给您提供的邮件会话Session
比如在JBoss中的${JBOSS_HOME}\server\default\deploy\mail-service.xml的内
配置。
其实不借助JBoss服务器的话,自己维护一个配置文件,将一些登录、验证信息填写进去也是可以的。
有了JBoss的代码如下:
之后的处理和单独在客户端处理邮件一样。
运行效果如下:。