javaEE之----------java代碼發送郵件

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.setFrom(new InternetAddress("[email protected]"));
            //郵件接收人
            message.setRecipient(RecipientType.TO,new InternetAddress("[email protected]"));
//          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.setFrom(new InternetAddress("[email protected]"));
        message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
        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,採用進行驗證通過。

簡單的註冊和登錄模塊,帶驗證碼。。能實現基本的註冊和登錄。有興趣的可以去我的下載資源裏下載去看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章