01_传智播客张孝祥java邮件开发_课程价值与目标介绍
02_传智播客张孝祥java邮件开发_邮件方面的基本常识
03_传智播客张孝祥java邮件开发_手工体验smtp和pop3协议
第3课时 关于邮件的理论以及通过cmd telnet到服务器发送和接受邮件(这一课时很重要)
其实邮件服务器就类似于邮局,发送方发到自己选择的邮件服务器,然后邮件服务器发送到目标服务器,目标服务器接收邮件,然后目标去目标服务器接受邮件。这这个过程中必须注意,除了用户取邮件用的是POP3协议,发送邮件到自己选择的服务器和自己这边的服务器转邮件到目标服务器之间用到的协议都是SMTP协议。只有用户主动去取邮件的时候才是POP3协议。
每个邮箱就相当于我们取信的和发信的邮局提供的邮件箱一样。我们的每个申请的邮箱账号,其实就是一个邮件箱,在邮件服务器上建立了一个账号和空间,邮件会放着这个服务器给我们开的账户的空间里。
邮件服务器按通讯协议分为两种类型:
SMTP服务器
POP3/IMAP服务器
发送邮件或者是将邮件转发给另外一个邮件服务器就是用SMTP协议。
如果用户去取邮件,使用的协议就是POP3协议
Smtp服务器端口号是:25
Pop3服务器端口号是:110
Smtp服务器登陆,首先需要先使用base64格式编码用户名和密码,然后登陆服务器时输入编码后的用户名与密码给服务器验证才会通过,而pop3服务器登陆是不需要使用base64编码的,直接输入原来的用户名和密码。
Dos命令:
>>Telnet mail.sina.com.cn:25 >>Ehlo itcast_test(账号) //ehlo <<auth login plain >>auth login //-->选择身份验证方式 ---->auth login---->输入base64位的账号和密码se << >>basee64 username << >>base64 password << >>Mail from:<iscast_test@sina.com> << >>Rcpt to:<iscast_test@sohu.com> << >>data From :<liliw@sohu.com> To:xx Subject:haha Date: Contetn. //邮件内容 . << . //点是结束 >>Quit
User 账号 Pass 密码 Stat List Retr Dele rset
第四课时 发送邮件的原理(相当重要)
一定要注意,其实在cmd中和smtp服务器交流的时候,邮件和服务器之间的关系。
在写邮件之前,需要先定义mail from<>和rcpt to<>,这个是专门和服务器打交道,由服务器识别的。而在写邮件的时候,邮件分两部分,一个是邮件头,一个是邮件内容(从‘data’表示内容开始,data之后是全部的内容,以一个‘.’ 表示邮件内容结束),内容部分的头部分又需要再写一个from:<>,这里面写邮件的发件人,可以是开始的mail from也可以是另外一个邮箱名字。这个邮件头,服务器是不检查的,是给邮件阅读程序看的,所以发出去之后,在客户端邮件阅读程序(outlook)中我们看到的发件人实际上是邮件头上面写的发件人,而不是登陆邮箱的发件人的邮箱。一定要注意这点。所以有的邮件中看到发件人的名字是unknown,就是因为邮件头中没有输入发件人的名字。内容需要写from, to ,subject, date, 然后才是正式的正文
其实就相当于我们自己写了一封信,但是信上面的发信人不是写自己的名字,而是别人的名字,冒充别人,收件人是没办法区分发件人的真实身份的。
如果是普通的客户端访问smtp服务器是需要用户名和密码的,而针对各个smtp服务器之间,是不需要用户名和密码的,否则的话,smtp服务器是不可能知道那么多smtp服务器用户名和密码的。
实际上sina或者是其他邮件服务器提供商(smtp server)都是分为两块的,也就是有两种服务器,
一种是专门给普通用户访问的邮件服务器,
一种是给其他邮件服务器供应商访问的邮件服务器。
如果是普通用户访问的邮件服务器,那么用户访问的时候就需要提供用户名和密码,而其他邮件服务器供应商访问的专门的邮件服务器,是不需要用户名密码的。直接访问。服务器提供商会将专门给其他邮件服务器供应商访问的邮件服务器加入到DNS中,这样当系统查到这个访问的地址来自于DNS的其他邮件服务器,就会认为对方是邮件服务器,允许它不需要服务器密码直接访问这个邮件服务器。而专给个人客户访问的邮件服务器则是不能够加入DNS的,否则其他邮件服务器访问sina.cn时,有可能找到的是这个专用个人访问邮件服务器,那么就会需要其他邮件服务器输入用户密码,导致其他邮件服务器无法登陆,邮件服务器之间无法互相转发邮件。
由于垃圾邮件泛滥,所以,现在网站提供的smtp服务器都要求提供身份验证,这就要求你在客户端软件(outlook)中的账户配置的服务器选项中,发送邮件服务器栏目中选中我的服务器要求身份验证,这样,服务器验证了身份才会和帮用户发送邮件。
>>ipconf /all << >>nslookup << >>set type=mx << >>sina.com << >>exit
JavaMail API按功能分为以下三大类
创建和解析邮件内容的API:Message类是创建和解析邮件的核心API, 它的实力对象代表一封电子邮件。
发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件发送对象,例如SMTP协议
接收邮件的API: Store类是接收邮件核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议
Session类:是用于定义整个应用环境信息的,以及收集客户端与邮件服务器建立网络连接的会话信息。如邮件服务器的主机名,端口号,采用的邮件发送和接收协议等。
其实JavaMail是分为两部分,一部分是接口包,一部分是实现类包。Mailapi.jar其实就是一个接口包,里面是没有实现的,只有在使用的时候,就需要实现包了,这些就是smtp.jar, pop3.jar等
生成邮件的过程中,还使用了一个第三方包,,也就是JAF(JavaBeans Activation Framework. JavaBean激活框架)是一个专用的数据处理框架,用于封装数据,并为应用程序提供访问的和操作数据的接口。Javamail.jar使用了JAF.不过,如果使用的是jdk6,就不需要导入jaf.jar了,因为jdk6中包括了jaf的jar包。