与传智播客的结缘

 

公元2009年6月27日晚8点28分59秒,我上网搜邮件发送视频,搜到了张孝祥老师讲的视频。当时没在意什么学校出的,只是很想看怎么发邮件。提到邮件我还得从华育说起,我在此也不多对华育评价,只希望他们别为了发展而牺牲质量。我在华育项目实训阶段,项目是企业内部人力资源管理系统(ERP),正好做到了内部邮件发送功能,这老师以前根本没说过的内容,这一开始让我们难的。等我们把基本的员工、部门的增删改查做完后。该动手开发邮件模块了,老师也只说让我们自己去找资料去完成。老师安排了几个人明天讲解邮件发送功能,我去研究MD5加密问题,第二天他们讲解了邮件发送功能,但都是在网上Copy一个案例,修修改改实现功能的,对于前因后果还是没有讲解。讲完后还是有很多人没有完成功能,我这邮件视频已全部下载完了,花了一宿把视频看完了。也写了几个小例子,就得明天抽时间跟同学展示邮件发送的内幕。很成功的教会了几个还不会发送邮件的同学。只是很郁闷有些同学把视频copy完回家压根就没看,一点不尊重别人的劳动成果。
下面是我看视频写的视频随笔:
    ====java邮件开发视频讲解=====
1)第一课 ==课程价值与目标介绍
a:以前邮件开发很赚钱,丁磊就是这么发的!
b:现在需求也是很大的,比如:很多网站注册给发邮件,过生日发邮件...

2)第二课 ==邮件方面的基本常识
a:邮件服务器发送、接收协议为smtp/pop3/imap,用户发送邮件协议smtp,用户取邮件协议pop3/imap
b:电子邮箱是邮件服务器上开个地址

3)第三课 ==手工体验smtp和pop3协议
a:通过sina邮件服务器给sohu邮件服务器发送邮件
b:命令行发送邮件,通过sina的smtp服务器
指令:telnet smtp.sina.com 25 ==连接sina的smtp服务器
指令:ehlo hjflbc1990 ==刚连接上后,用用户hjf1990打招呼
指令:auth login/plain 选择登陆方式,login   (auth login)
指令:输入base64位用户名、密码
指令:mail from: <hjflbc1990@sina.com> ==发件人,真实的邮箱
指令:rcpt to:   <hjflbc1990@sohu.com> ==收件人,真实的邮箱
指令:data ==回车后,开始邮件内容处理
指令:from: <lili@sohu.com> ==发件人,相当于写文件的人,上面的是传邮件的人
指令:subject: haha ==主题,haha
指令:test!!! ==注意,在subject写完后,必须空一行在输入邮件内容
指令:. ==在内容输入完,输入点,表示邮件内容输入完毕(考虑如果内容有个.怎么办)

c:命令行查看邮件,通过sohu的pop3服务器
指令:telnet pop.sohu.com 110 ==连接sohu的pop3服务器
指令:user hjflbf1990 ==输入用户名,无需base64位码
指令:pass jx***** ==输入密码
指令:stat ==查看邮件属性 1 1099 前面表示第几封邮件,后面表示邮件大小
指令:list ==查看邮件属性 1 1099 前面表示第几封邮件,后面表示邮件大小
指令:list 1 ==查看第一封邮件属性
指令:retr 1 ==显示第一封邮件的具体信息,内容,转发的过程,被多少邮局批过
指令:dele 1 ==根据编号删除邮件,但这里没真正删除,做个标记(类似事务未提交)
指令:rset   ==相当于从垃圾箱恢复邮件
指令:quit   ==就让标记提交

d:使用outlook客户端软件发送邮件,接收邮件
e:smtp与pop3服务器在每个邮件服务器上都有,在每个邮件服务器帮助中心都有。

4)第四课 ==邮件协议总结与邮件服务器的工作原理
a:对smtp指令的解释
b:ehlo ==原来是smtp升级后把helo给换为ehlo
c:在输入base64用户名要快,防止服务器断开连接
d:邮件信息分为两部分,头信息,内容信息。
头信息==from: ** to: ** subject: ** date:**
e:验证,当时普通客户端发送邮件必须验证,
当是别的邮件服务器向某邮件服务器发送邮件无需验证。
发送是否成功,不能确定!!!
f:因为垃圾邮件泛滥,所以需要了验证。

5)第五课 ==JavaMail.API的介绍
a:用户代码实现发送邮件,
方式一:通过scoket与服务器通信,但复杂邮难创建。
方式二:sun提供javamail api 通过某些类就能实现发送邮件。
b:JavaMail Api主要分为三大类:
Message==创建邮件
Transport==发送邮件类
Store===接收邮件类
在此同时配置开发环境,如邮件服务器主机号,端口,协议..用到Session类
c:JAF JavaBeans Activation Framework JavaBeans激活框架,
用于封装数据,为应用程序提供访问及数据的接口。
d:JDK1.6已经包含此jaf api了,开发mail简单。
e:lib包的介绍

6)第六课 ==编写一个JavaMail发送邮件的程序
a:记住一点永不忘邮件发送,三步骤!!
第一步: 创建卫星 Message (注意是个接口)
第二步: 创建火箭 Transport (final类)
第三步: 火箭发送卫星 transport.sendMessage(msg);
b:细节处理,具体实现。
Message 接口,所以实现子类MimeMessage...查看文档
在准备卫星时得配置一些环境==Session,Properties(验证、服务器protocol)
Message创建完后,得给他添加些信息,如主题,发件人,收件人,内容...
框架很灵活,当msg设置了发件人,send时就可以不填
Transport.send()是静态方法,本身做了三件事,连服务器,发邮件,关闭连接..
因为我们自己创建连接了,所以不用静态方法..
session里填了smtp.sina.com 那么transport就不用填
c:简单的main函数,发送。cool

7)第七课 ==使用Authenticator和send静态方法
a:好问题,如果我发送一万个人,那么收件人在什么时候指定。
b:getDefaultInstance() 与 getInstance()区别
前者创建session后会在Session(HttpServletSession)上保留,下次再创建使用以前创建的
后者每次重新创建。
c:用静态的send方法,要考虑了,在msg里得指明收件人
d:setRecipients(arg0,arg1)
arg0指明收件人类型,是收件人、抄送、暗送
arg1可以InternetAddress.parse("aa@sina.com,gg@sina.com")解析后返回数组
e:静态的send没有指明登陆的用户名,密码..则用到Authenticator类
Authenticator类抽象的无继承类,所以内部匿名类
而且返回验证信息,称为:验证信息返回器==给你面粉返回馒头('侧列法')
f:设置msg的内容时,setText() 与 setContent()比较
setText("ssss")普通文本信息
setContent("<h1>哈哈</h1>","text/html;charset=gbk")则可以让他以html解析,gbk字符

8)第八课 ==邮件的基本格式与编码
a:简单的邮件格式,头+体
b:编码,百度搜索之后%B4%AB%D6%C7%B2%A9%BF%CD对应传智播客。把4bit发送24bit
c:介绍base64编码及quoted-printable编码
base64所有都转化 === 3字节 -- 4字节
quoted-printable只对非ASCII编码 1字节 -- 3字节
当文章中只有一两个中文时,选择下面赚钱

9)第九课 ==邮件文件的内部结构与API分析
a:复杂的邮件。含图片、附件、正文,通过outlook可以查看邮件结构
b:整个邮件包含:头+体
mime内容包含两部分,头+体
c:mime中的组合关系
multipart/alternative 选择关系
multipart/related 关联关系
multipart/mixed 混合关系
d:复杂邮件信息,那么msg设置了MimeMultipart对象
MimeMultipart对象里包含MimeBodyPart对象
MimeBodyPart对象里还可以包含MimeMultipart对象

10)第十课 ==搭建创建复杂邮件整体架构的代码
a:multipart里面含有MimeBodyPart就邮件来说一个content和两个附件
b:附件一处理,MimeBodyPart.setDataHandler
(new DataHandler(new DataSource(new FileDataSource)))--其实有错,只是演示类
c:含图片的MimeB一个odyPart里含有multipart
d:当涉及到multipart时必须msg.saveChages()生成内容
e:可以不发射,卫星writeTo(OutputStream)里,在做处理

11)第十一课 ==填充和完善创建复杂邮件的细节代码
a:htmlPart.setContent("图片<img src='fg.jpg'/>","text/html;charset=gbk")
如何使src的图片是开始准备的part呢?
gifPart.setHeader("Content-Location","fg.jpg");
b:附件必须设置名字不然不算是附件。重要!!!
c:出了问题,找到是有个地方,multipart构造时无需写主类型,直接写mixed

12)第十二课 ==中文附件名_回信地址_友好名称等技巧
a:附件中文处理,只需把中文做个编码。用MimeUtility类
b:发件人和回复人不同,只需msg.setReplyTo()则是回复人
c:当涉及中文时记住编码一下就可以了
e:格式 sina <hjf@sina.com> 如果sina是中文则编码处理一下,这样显示友好名称

13)第十三课 ==如何直接发送一封现有的邮件文件
a:简单化处理邮件开发,用outlook生成一封邮件,在用代码直接发送邮件
b:new MimeMessage(session, new FileInputSteam("**"));

14)第十四课 ==在Web应用中增加邮件发送功能
a:学会导jar包,只是导出class文件。
b:子类只能异常比父类少。面试题
c:部署与开发的区别,部署之后运行得看是否含相应的jar包
尤其tomcat是j2ee5的服务器,使用jboss,weblogic就可以
d:邮件发送实际考虑,假如发一万封邮件,肯定花时很长,怎么办呢?邮件发送机
方式一:异步的发送
方式二:servlet调用另外一个线程,做邮件发送。
   后台发送邮件,错误信息输入到日志文件里。

15)第十五课 ==Tomcat的JavaMail_JNDI资源与类加载问题
a:现在tomcat已经提供mail服务
b:JNDI容器,tomcat程序创建了对象,提供给另外程序访问
c:tomcat类加载器,因为是tomcat创建session他不能找到webapp/lib/mail.jar
所以必须把jar发到tomcat下去
d:Session session = (Session)envCtx.lloup("mail/Session");
会出类转化异常,因为Session session执行时会在当前
webapp/lib/mail类加载器创建出session字节码,
(Session)envCtx.lloup("mail/Session")则是在
tomcat类加载器服务器创建出session字节码
两个class文件创建的对象,所以内存中类的转化异常
e:解决方法,删除webapp/lib下的jar包,
Session session在自己类加载器没有时,会请求上级加载器,
Tomcat类委托加载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值