摘要:時間年月日星期三說明本文部分內容均來自慕課網。用戶過生日,系統發送生日祝福郵件。將最新活動和優惠以郵件的形式告知會員。通常把處理用戶請求郵件發送請求的郵件服務器稱為服務器。提供了加密的協議被稱為。
時間:2017年06月07日星期三
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...
課程內容
理解郵件開發涉及的基本概念 了解SMTP和POP3協議 掌握配置Foxmail 掌握JavaMail發送簡單郵件第二章:郵件相關概念介紹 2-1 JavaMail的概述
JavaMail
JavaMail,顧名思義,提供給開發者處理電子郵件相關的編程接口。它是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。我們可以基于JavaMail開發出類似于Microsoft Outlook的應用程序。
為什么要學習JavaMail
現在很多的WEB開發都需要使用JavaMail,例如: 1.用戶注冊后,網站發送一封激活郵件驗證。 2.用戶過生日,系統發送生日祝福郵件。 3.將最新活動和優惠以郵件的形式告知會員。 這些應用都需要開發人員會使用編程語言發送郵件。2-2 郵件開發中的相關的術語
電子郵箱
電子郵箱(E-mail地址)需要在郵件服務器上進行申請,確切地說,電子郵箱其實就是用戶在郵件服務器上申請的一個賬戶。用戶在郵件服務器上申請了一個賬戶后,郵件服務器就會為這個賬號分配一定的空間,用戶從而可以使用這個賬號以及空間,發送電子郵件和保存別人發送過來的電子郵件。
郵箱服務器
服務器的概念不難理解,應為作為WEB開發人員我們應該更清楚什么是服務器,服務器指的是一臺電腦安裝了一個服務器軟件。那么這臺電腦就可以稱為是WEB服務器。那么同樣的一臺電腦安裝了郵件服務器軟件,那么這臺電腦稱為是郵箱服務器。要在Internet上提供電子郵件功能,必須有專門的電子郵件服務器。例如現在網絡上有很多提供郵件服務的廠商:新浪、搜狐、網易等等他們都有自己的郵件服務器。
SMTP協議(發送郵件協議)
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議, 它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。 SMTP協議屬于TCP/IP協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。 SMTP協議所指定的服務器,就可以把E-mail寄到收信人的服務器上了,整個過程只要幾分鐘。 SMTP服務器則是遵循SMTP協議的發送郵件服務器,用來發送或中轉發出的電子郵件。 通常把處理用戶SMTP請求(郵件發送請求)的郵件服務器稱為SMTP服務器。 默認端口號為25
POP3協議(接收郵件協議)
POP3,全名為“Post Office Protocol - Version 3”,即“郵局協議版本3”。 是TCP/IP協議族中的一員,由RFC1939 定義。 本協議主要用于支持使用客戶端遠程管理在服務器上的電子郵件。 提供了SSL加密的POP3協議被稱為POP3S。 同樣,用戶若想從郵件服務器管理的電子郵箱中接收一封電子郵件的話,他連上郵件服務器后, 也需要遵循一定的通訊格式,POP3協議用于定義這種通訊格式。 因而,通常我們也把處理用戶POP3請求(郵件接收請求)的郵件服務器稱為POP3服務器。 默認端口號1102-3 郵件收發過程的介紹
郵件收發過程
第三章:郵箱服務器和客戶端安裝及配置 3-1 郵箱服務器的安裝和配置安裝軟件eyoumailserversetup.exe
安裝成功后,修改域名
新建賬號
3-2 郵箱客戶端的安裝和配置安裝軟件foxmail.exe
安裝成功后,登錄郵箱
第四章:郵件發送代碼實現 4-1 環境搭建以用戶注冊為例,當用戶注冊成功之后,向用戶注冊郵箱發送用戶激活郵件。
教學時,使用傳統開發方式,先建數據庫表,然后在開發項目。我在學習時,使用JPA技術,基于實體對象模型進行自動創建表。
構建工具:maven
使用框架:Spring Boot
POM文件如下
4.0.0 com.myimooc myregistweb 0.0.1-SNAPSHOT jar myregistweb Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-web mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin 1.5.3.RELEASE
用戶注冊頁面代碼
4-2 用戶注冊相關類的創建用戶注冊頁面
代碼演示:
1.編寫領域模型User類
package com.myimooc.myregistweb.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue private Integer uid; private String username; private String password; private String nickname; private String email; private Integer state; private String code; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
2.編寫工具類UuidUtils類
package com.myimooc.myregistweb.util; import java.util.UUID; /** * 生成隨機字符串工具類 * @create ZhangCheng by 2017-06-08 * */ public class UuidUtils { public static String getUuid(){ return UUID.randomUUID().toString().replace("-", ""); } }4-3 用戶注冊功能代碼實現
代碼演示:
1.編寫UserRepository類
package com.myimooc.myregistweb.dao; import org.springframework.data.jpa.repository.JpaRepository; import com.myimooc.myregistweb.domain.User; public interface UserRepository extends JpaRepository{ User findByCode(String code); }
2.編寫UserService類
package com.myimooc.myregistweb.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.myimooc.myregistweb.dao.UserRepository; import com.myimooc.myregistweb.domain.User; import com.myimooc.myregistweb.util.MailUtils; @Service public class UserService { @Autowired private UserRepository userRepository; /** * 用戶注冊的方法 * @param user */ public void regist(User user){ // 將數據存入到數據庫 userRepository.save(user); // 發送一封激活郵件 try { MailUtils.sendMail(user.getEmail(), user.getCode()); } catch (Exception e) { // e.printStackTrace(); System.out.println("郵件發送異常"); } } /** * 用戶激活的方法 * @param user */ public boolean registActive(String code){ User user = userRepository.findByCode(code); if( null == user){ return false; } user.setState(1); user.setCode(""); userRepository.save(user); return true; } }
3.編寫UserController類
package com.myimooc.myregistweb.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.myimooc.myregistweb.domain.User; import com.myimooc.myregistweb.service.UserService; import com.myimooc.myregistweb.util.UuidUtils; @Controller public class RegistController { @Autowired private UserService userService; /** * 跳轉到注冊頁面 * @return */ @GetMapping("/regist") public ModelAndView toRegistPage(){ return new ModelAndView("regist"); } /** * 處理用戶注冊請求 * @return */ @PostMapping("/regist") public ModelAndView regist(User user){ user.setState(0);// 0,未激活;1,已激活 String code = UuidUtils.getUuid()+UuidUtils.getUuid(); user.setCode(code); // 調用業務層處理數據 userService.regist(user); // 頁面跳轉 return new ModelAndView("regist"); } /** * 處理用戶激活請求 * @return */ @GetMapping("/regist/active") @ResponseBody public Object registActive(@RequestParam("code") String code){ boolean result = userService.registActive(code); return "激活狀態:"+result; } }4-4 發送激活郵件
代碼演示:
package com.myimooc.myregistweb.util; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; /** * 郵件發送工具類 * @create ZhangCheng by 2017-06-08 * */ public class MailUtils { /** * 發送郵件的方法 * @param to 收件人郵箱地址 * @param code 郵件的激活碼 */ public static void sendMail(String to,String code) throws Exception{ // 1.創建連接對象,連接到郵箱服務器 Properties props = new Properties(); Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("service@zccoder.com", "123"); } }); // 2.創建郵件對象 Message message = new MimeMessage(session); // 設置發件人 message.setFrom(new InternetAddress("service@zccoder.com")); // 設置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(to)); // 設置郵件主題 message.setSubject("來自zccoder的賬號激活郵件"); // 設置郵件的正文 message.setContent("4-5 用戶激活功能代碼實現來自zccoder的賬號激活郵件,激活請點擊一下鏈接:
http://localhost:8080/regist/active?code="+code+"
", "text/html;charset=UTF-8"); // 3.發送一封激活郵件 Transport.send(message); } }
代碼演示:
package com.myimooc.myregistweb.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.myimooc.myregistweb.domain.User; import com.myimooc.myregistweb.service.UserService; import com.myimooc.myregistweb.util.UuidUtils; @Controller public class RegistController { @Autowired private UserService userService; /** * 跳轉到注冊頁面 * @return */ @GetMapping("/regist") public ModelAndView toRegistPage(){ return new ModelAndView("regist"); } /** * 處理用戶注冊請求 * @return */ @PostMapping("/regist") public ModelAndView regist(User user){ user.setState(0);// 0,未激活;1,已激活 String code = UuidUtils.getUuid()+UuidUtils.getUuid(); user.setCode(code); // 調用業務層處理數據 userService.regist(user); // 頁面跳轉 return new ModelAndView("regist"); } /** * 處理用戶激活請求 * @return */ @GetMapping("/regist/active") @ResponseBody public Object registActive(@RequestParam("code") String code){ boolean result = userService.registActive(code); return "激活狀態:"+result; } }第五章:課程總結 5-1 課程總結
總結
JavaMial的介紹 相關術語 郵件收發過程 郵件服務器搭建和客戶端安裝 用戶注冊發送郵件激活
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70144.html
時間:2017年07月09日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 課程概述 主要內容 驗證碼歷史 課程內容 不同方案對比 設計與實現 總結 1-2 驗證碼歷史 驗證碼歷史 無驗證碼:垃圾騷擾 Luis von Ahn:Captcha 不斷...
摘要:時間年月日星期一說明本文部分內容均來自慕課網。多用于網絡加密。散列函數函數或消息摘要函數主要作用散列函數用來驗證數據的完整性。 時間:2017年4月10日星期一說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere...
摘要:慕課網發送郵件學習總結時間年月日星期六說明本文部分內容均來自慕課網。 慕課網《Spring Boot 發送郵件》學習總結 時間:2018年09月08日星期六 說明:本文部分內容均來自慕課網。@慕課網:https://www.imooc.com 教學源碼:https://github.com/ityouknow/... 學習源碼:https://github.com/zccoder...
時間:2017年4月13日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 數字簽名算法概述 數字簽名算法 簽名-安全性,抗否認性 數字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法 驗...
摘要:時間年月日星期五說明本文部分內容均來自慕課網。本套課程介紹微信公眾號開發,主要涉及公眾號介紹編輯模式介紹開發模式介紹等。慕課網是垂直的互聯網技能免費學習網站。 時間:2017年08月11日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github...
閱讀 2947·2023-04-25 22:16
閱讀 2093·2021-10-11 11:11
閱讀 3247·2019-08-29 13:26
閱讀 593·2019-08-29 12:32
閱讀 3409·2019-08-26 11:49
閱讀 2987·2019-08-26 10:30
閱讀 1939·2019-08-23 17:59
閱讀 1507·2019-08-23 17:57