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,採用進行驗證通過。
簡單的註冊和登錄模塊,帶驗證碼。。能實現基本的註冊和登錄。有興趣的可以去我的下載資源裏下載去看看。