JavaMail簡單版實驗測試


前言:

  最近由於實現web商城的自動發送郵件功能的需求,故涉獵的郵箱協議的內部原理。現將簡單版的Java Mail實例做個代碼展示,並附上其中可能出現的bug貼出,方便感興趣的讀者進行測試!

1.載入相關jar包

  客戶端傳輸郵件需要用的jar包:activation.jar和mail.jar

  (下載:https://github.com/SeaSky0606/share)

2.JavaMail代碼實現

 1 package com.seasky.mail;
 2 
 3 import java.util.Properties;
 4 
 5 import javax.mail.Address;
 6 import javax.mail.Message;
 7 import javax.mail.MessagingException;
 8 import javax.mail.Session;
 9 import javax.mail.Transport;
10 import javax.mail.internet.InternetAddress;
11 import javax.mail.internet.MimeMessage;
12 
13 public class Mail {
14 
15     /**
16      * @param args
17      */
18     public static void main(String[] args) {
19 
20         //屬性設置,創建會話
21         Properties properties = new Properties();
22         properties.setProperty("mail.transport.protocol", "smtp");
23         Session session = Session.getInstance(properties);
24         session.setDebug(true);        //設置debug模式
25         //創建Message對象
26         Message message = new MimeMessage(session);
27         try {
28             message.setSubject("我是主題");
29             message.setFrom(new InternetAddress("soft03_test@sina.com"));
30             message.setContent("<h2>我是內容</h2>", "text/html;charset=utf-8");
31             
32             //創建接口,並連接(登錄)
33             Transport transport = session.getTransport();
34             transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
35             //發送郵件
36             transport.sendMessage(message, new Address[]{new InternetAddress("123456789@qq.com"),
37                     new InternetAddress("soft03_test@sina.com")});
38         } catch (MessagingException e) {
39             e.printStackTrace();
40         }finally{
41             System.out.println("---finish--");
42         }
43         
44     }
45 
46 }

登錄測試郵箱查看:

 

3.Debug模式下打印出smtp連接建立的過程

DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-33.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25

EHLO CJH
250-smtp-2-33.smtpsmail.fmail.yf.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
c29mdDAzX3Rlc3Q=
334 UGFzc3dvcmQ6
c29mdDAzX3Rlc3Q=
235 OK Authenticated
DEBUG SMTP: use8bit false
MAIL FROM:<soft03_test@sina.com>
250 ok
RCPT TO:<123456789@qq.com>
250 ok
RCPT TO:<soft03_test@sina.com>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   123456789@qq.com
DEBUG SMTP:   soft03_test@sina.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: soft03_test@sina.com
Message-ID: <535071474.0.1446284102239.JavaMail.Administrator@CJH>
Subject: =?UTF-8?B?5oiR5piv5Li76aKY?=
MIME-Version: 1.0
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: base64

PGgyPuaIkeaYr+WGheWuuTwvaDI+
.
250 ok queue id 2476333014883
---finish--

4.常見問題:

1.出現包沖突

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

  沒有找到相關的內部類錯誤,即說明存在 jar包沖突!

 解決方法:

    去除開發環境的內部javaEE包,或者刪除其內部java.mail下面的所有類!

 

2.注冊的實驗郵箱測試失敗

535 5.7.8 authentication failed
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:319)
at javax.mail.Service.connect(Service.java:169)
at com.seasky.mail.JMailTest.main(JMailTest.java:35)
---finish--

  解決方法:

    由於實驗測試郵箱可能需要開通vip,所以建議直接使用本樣例中的新浪郵箱的賬號密碼(soft03_test/soft03_test)!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM