E-Mail邮件简介:
利用java代码发邮件可以实现用户注册的严格性,用户不会随意的进行注册了,邮箱注册才可以注册成功,还有可以向用户推销自己的产品通过发邮件,当然也可以找回密码等
邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。
发送邮件的服务器使用发送协议,现在常用的是SMTP协议。
所以,通常发邮件的服务器也称为SMTP服务器。
接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,
所以通常也被称为POP3或IMAP服务器。
目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,
它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。
默认发邮件服务器的端口为25,收邮件的端口为110.
SMTP协议-发邮件协议
全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间
、以及两台SMTP服务器之间的通讯规则。端口一般为25.
POP3协议-收邮件协议
全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则
。端口一般为110.
IMAP协议-对POP3的扩展
全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,
定义了邮件客户端软件与IMAP服务器的通讯规则。
手动发邮件:(必须打开smtp协议,必须要有相应的账户在服务器中)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
手动发: <span
style= "font-size:18px;" >cmd
界面 telnet
必须手动启动 程序---》打开windows功能---》选中telnet 还有一个服务打开。。。。。手动启动
应用,启动 SMTP
简单的邮件传输协议 发送的 p0p3
接受邮件的 采用base64加密,账号和密码都是加密的。 BASE64Encoder
encoder = new
BASE64Encoder(); name
=encoder.encode(name.getbytes()); 这就是加密后后的name
了 telent
smtp.sina.com 25
采用谁的服务器 ehlo
hncu 打招呼 auth
login 权威登录 name pwd
用户名和密码base64jiaguomi de mail
from:<hncujava @sina .com>
给服务器看的,必须正确 rcpt
to:<hncujava @126 .com>
发到哪里去 data
from: to:<dsadsad @126 .com> subject:sadkjsakl
邮件的主题 【空行】 邮件正文 .
英文的句号结束 quit
退出 </dsadsad @126 .com></adjkhdjkshjd @sina .com></hncujava @126 .com></hncujava @sina .com></span> |
PS:在用户手动或者采用java 代码发送邮件的时候,用户名和密码都是经过加密的BASE64加密的
1
2
3
4
5
6
7
8
9
10
|
@Test public
void
base64Use() throws
Exception{ String
name = "hncujava" ; String
pwd = "1234567" ; BASE64Encoder
encoder = new
BASE64Encoder(); name
= encoder.encode(name.getBytes()); pwd
= encoder.encode(pwd.getBytes()); System.out.println(name); System.out.println(pwd); } |
现在采用java代码实现
一般格式
我们采用Java代码发邮件需要导入外面的两个javaMail包
用到的主要类:Properties(负责设置通道),Session(负责建立连接),
MimeMessage(负责邮件信息),Transport(发送邮件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<span
style= "font-size:18px;" > @Test public
void
Test1(){ //第一步,首先是设置配置文件属性 Properties
p = new
Properties(); //首先要有一个属性对象 //指定主机 p.setProperty( "mail.host" ,
"smtp.sina.com" ); //采用smtp协议 //
p.setProperty("mail.transport.protocol", "smtp");//添加这个之后腾讯的里面垃圾箱 //是否采用用户名和密码登录 p.setProperty( "mail.smtp.auth" ,
"true" ); //相关协议配置完成之后,开始发送邮件 //java发邮件的步骤 //第一步:
session填写用户名和密码 Session
session =Session.getDefaultInstance(p, new
Authenticator() { @Override protected
PasswordAuthentication getPasswordAuthentication() { PasswordAuthentication
pass= new
PasswordAuthentication ( "hncujava" ,
"1234567" ); //第一个账户名,第二个密码 return
pass; } }); session.setDebug( true ); //以调试的方式运行 //第二步:
邮件正文 MimeMessage MimeMessage
message = new
MimeMessage(session); try
{ //邮件发件人 //邮件接收人 //
message.setRecipient(RecipientType.TO,new InternetAddress("[email protected]")); //邮件主题 message.setSubject( "hello" ); message.setContent( "采用java发的邮件。。还不粗哦" ,
"text/html;charset=utf-8" ); //
发出邮件 Transport.send(message); }
catch
(MessagingException e) { //
TODO Auto-generated catch block e.printStackTrace(); } } </span> |
带附件
上面的不能实现带附件,我们采用另外的类 MimeBodyPart和MimeMultipart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<span
style= "font-size:18px;" > public
void
test3() throws
AddressException, Exception{ for ( int
i= 0 ;i< 100 ;i++){ Properties
p = new
Properties(); p.setProperty( "mail.host" ,
"smtp.sina.com" ); p.setProperty( "mail.smtp.auth" ,
"true" ); //创建session进行登录 Session
sess=Session.getDefaultInstance(p, new
Authenticator() { @Override protected
PasswordAuthentication getPasswordAuthentication() { PasswordAuthentication
ps = new
PasswordAuthentication( "hncujava" ,
"1234567" ); return
ps; } }); sess.setDebug( true ); //成功登录之后,开始写邮件了 ///设置发送方,就接收方,邮件主题,邮件内容 MimeMessage
message = new
MimeMessage(sess); message.setSubject( "我是乔爷,ko一切" ); MimeBodyPart
body1= new
MimeBodyPart(); body1.setContent( "<font
color=" 'green' "
size=" '40' ">乔爷</font><font
color=" 'red' "
size=" '20' ">ko</font>......." , "text/html;charset=utf-8" ); //附件一 MimeBodyPart
body2= new
MimeBodyPart(); body2.setDataHandler( new
DataHandler( new
FileDataSource( "./img/1.jpg" ))); body2.setFileName( "1.jpg" ); MimeBodyPart
body3 = new
MimeBodyPart(); body3.setDataHandler( new
DataHandler( new
FileDataSource( "./img/2.jpg" ))); //
body3.setFileName("图片2.jpg");//中文服务器自己取名 body3.setFileName(MimeUtility.encodeText( "傻逼乔2.jpg" )); //中文需要编码。。。
需要编码,邮件显示的时候需要 //上面都是简单的信息,没有汇总 MimeMultipart
mm = new
MimeMultipart(); mm.addBodyPart(body1); mm.addBodyPart(body2); mm.addBodyPart(body3); message.setContent(mm); Transport.send(message); }}</span> |
另外:采用javaMail做了一个简单的邮件验证登录,主要的知识点是 当用户注册时候,我们数据库插入数据,里面的数据有两个列 ,一个是active(是否激活)全部设置为0,另一个是acode(给用户发邮件的时候传过去,当用户通过这个链接(带acode))访问我们写的另一个serlvet的时候,再次访问数据库,将active设置为1。
当用户登录的时候,我们需要采用去数据库验证最主要的是active必须为1,采用进行验证通过。
简单的注册和登录模块,带验证码。。能实现基本的注册和登录。有兴趣的可以去我的下载资源里下载去看看。