平時我們網上逛網站的時候,經常會用到網站的注冊。有很多方法,比如發短信驗證,發郵箱驗證。最近在SSH框架下,做了一個簡單的郵件發送激活鏈接到郵箱,然后激活注冊用戶的一個功能。我用到的MailServer是易郵郵件服務器,引用的是javax.mail.jar包。javamail顧名思義,提供給開發者處理電子郵件相關的編程接口。它是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。
【常用類介紹】
下面有一些常用的類,給大家介紹一下:
【Authenticator】
這個是一個抽象類,通過用戶名和密碼訪問受保護的資源,這些資源就是郵件服務器。創建完成后,必須向 session 注冊 Authenticator。然后,在需要認證的時候,就會通知 Authenticator。
【Message】
這是一個抽象類用來創建要發送的消息,比如主題,內容啊。必須有一個子類來實現方法。
【Session】
Session類定義了一個基本郵件會話(session),是Java Mail API最高層入口類。所有其它類都是經由這個session才得以生效。Session對象用Java.util.Properties對象獲取信息,如郵件服務器、用戶名、密碼及整個應用程序中共享的其它信息。這個Session類代表JavaMail中的一個郵件session。每一個基于JavaMail的應用程序至少有一個session但是可以有任意多的session。
Session sendMailSession;
sendMailSession = Session.getInstance(props, null);
【Transport】
消息發送的最后一部分是使用Transport類。這個類用協議指定的語言發送消息(通常是SMTP)。它是抽象類,它的工作方式與Session有些類似。僅調用靜態send() 方法,就能使用類的缺省版本:Transport.send(message)。或者,讀者也可以從針對自己的協議的會話中獲得一個特定的實例,傳遞用戶名和密碼(如果不必要就不傳),發送消息,然后關閉連接。
【代碼實現】
mail工具類:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package cn.itcast.shop.utils; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * 郵件發送工具類 * @author Zhouzhou * @date 2016-1-1 * @time 上午08:52:47 */ public class MailUitls { public static void sendMail(String to,String code){ /** * 1.獲取session * 2.創建一個代碼郵件的對象message * 3.發送郵件Transport */ /** * 1.獲得連接對象 */ Properties props= new Properties(); props.setProperty( "mail.host" , "localhost" ); Session session=Session.getDefaultInstance(props, new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub return new PasswordAuthentication( "service@azz.com" , "111" ); } }); //2.創建郵件發送對象 Message message= new MimeMessage(session); //3.設置發件人 try { message.setFrom( new InternetAddress( "service@azz.com" )); //設置收件人 message.addRecipient(RecipientType.TO, new InternetAddress(to)); //標題 message.setSubject( "來自周洲商城的官方激活郵件" ); message.setContent( "<h1>AZZ商城官方激活郵件!點下面鏈接完成激活操作!</h1><h3><a href='http://192.168.21.114:8080/shop/user_active.action?code=" +code+ "'>http://192.168.21.114:8080/shop/user_active.action?code=" +code+ "</a></h3>" , "text/html;charset=UTF-8" ); // 3.發送郵件: Transport.send(message); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { sendMail( "aaa@azz.com" , "你的激活碼是azz19931016" ); } } |
User的業務層在注冊的時候調用這個類,使用sendmail方法。
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
48
|
package cn.itcast.shop.user.service; import org.springframework.transaction.annotation.Transactional; import cn.itcast.shop.user.dao.UserDao; import cn.itcast.shop.user.vo.User; import cn.itcast.shop.utils.MailUitls; import cn.itcast.shop.utils.UUIDUtils; //業務層 @Transactional public class UserService { //安裝用戶名查詢用戶的方法 private UserDao userDao; public void setUserDao(UserDao userDao) { this .userDao = userDao; } public User findByUsername(String username){ return userDao.findByUsername(username); } //業務層:完成 用戶注冊 public void save(User user) { // TODO Auto-generated method stub //將數據存入數據庫 user.setState( 0 ); //1已經激活,0沒有激活 String code=UUIDUtils.getUUID()+UUIDUtils.getUUID(); user.setCode(code); userDao.save(user); // 發送激活郵件; MailUitls.sendMail(user.getEmail(), code); } // 業務層根據激活碼查詢用戶 public User findByCode(String code) { return userDao.findByCode(code); } // 修改用戶的狀態的方法 public void update(User existUser) { userDao.update(existUser); } // 用戶登錄的方法 public User login(User user) { return userDao.login(user); } } |
最后實現了這樣的效果:
以上就是本文的全部內容,希望對大家的學習有所幫助。