成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么使用springboot發(fā)郵件

這篇文章主要介紹“怎么使用spring boot發(fā)郵件”,在日常操作中,相信很多人在怎么使用spring boot發(fā)郵件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用spring boot發(fā)郵件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了黃埔免費建站歡迎大家使用!

1、最簡版spring boot發(fā)郵件

spring boot發(fā)郵件還是挺簡單的,首先把發(fā)郵件的start加到pom里面:

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

然后在application.properties里面配置好關(guān)于發(fā)郵件的參數(shù)

spring.mail.host=smtp.163.com
spring.mail.port=25
spring.mail.username=yourmail@163.com
spring.mail.password=yourpassword

其中spring.mail.host和spring.mail.username是一一對應的,哪里的郵箱就要用哪里的smtp服務器

然后我寫了一個controller來接收留言板的內(nèi)容:

    @Value("${spring.mail.username}")
	private String fromMail;
	@Autowired
    private JavaMailSender mailSender;

    @RequestMapping(value = "/getNote", method = RequestMethod.POST)
	public String getNote(Note note) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper;
		try {
			helper = new MimeMessageHelper(mimeMessage, true);
			//發(fā)件人
	        helper.setFrom(fromMail,note.yourName);
	        //收件人(留言內(nèi)容最終發(fā)往的郵箱地址)
	        helper.setTo("recieve@mail.com");
	        //標題
	        helper.setSubject(note.yourSubject);
	        //文本
	        helper.setText("from email:"+note.yourEmail+"\n"+note.yourMessage);
	        mailSender.send(mimeMessage);
		} catch (MessagingException | UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
               
		return "redirect:return.htm";
	}
public class Note {
	String yourName;
	String yourEmail;
	String yourSubject;
	String yourMessage;

//getter,setter省略
}
  • note對象是留言板的內(nèi)容

  • JavaMailSender和MimeMessageHelper是官方推薦的好基友,一般配套使用

  • fromMail就是在application.properties里面配置的spring.mail.username屬性,也就是發(fā)郵件的一方,用helper.setTo(...)配置

  • 額外說一下,由于填留言板時一般也會留郵件地址,但那個郵件地址和這里的任何一個設置郵件的地方毫無關(guān)系,只需要在郵件的文本里面做記錄就好了,我之前就弱智了一把,把留言板里面的郵件地址填到helper.setTo(...),結(jié)果浪費了我半個小時查這種bug,真是一言難盡...

2、授權(quán)碼發(fā)郵件

     很多時候,按照上面的方法發(fā)郵件會出現(xiàn)下面的錯誤:

javax.mail.AuthenticationFailedException: 535 Error: authentication failed

其中的一個原因是郵件服務器使用了授權(quán)碼登錄方式,也就是第三方登錄不能直接使用賬號密碼,而需要使用一種授權(quán)碼的方式,比如上面的163.com郵箱,就可以設置授權(quán)碼登錄,設置界面如下:

怎么使用spring boot發(fā)郵件

QQ郵箱更是默認就需要用授權(quán)碼登錄,QQ郵箱的授權(quán)登錄操作文檔請看這里

使用授權(quán)碼登錄后,需要把之前application.properties里面spring.mail.password的內(nèi)容從密碼換成授權(quán)碼,就能夠正常發(fā)郵件了。

3、簡單聊下JavaMailSender和MimeMessageHelper

我們查下JavaMailSender的代碼就知道,它其實背景比較復雜。首先它繼承了org.springframework.mail.MailSender接口。

public interface JavaMailSender extends MailSender {
...
}

而它本身也是一個接口,實現(xiàn)類只有一個,JavaMailSenderImpl

怎么使用spring boot發(fā)郵件

我們再來翻JavaMailSenderImpl的代碼,發(fā)現(xiàn)spring并沒有自己來做發(fā)送郵件的功能,而是直接用了java自身的郵件發(fā)送功能,核心是這一段

protected void doSend(MimeMessage[] mimeMessages, @Nullable Object[] originalMessages) throws MailException {
		Map<Object, Exception> failedMessages = new LinkedHashMap<>();
		Transport transport = null;

		try {
			for (int i = 0; i < mimeMessages.length; i++) {

				// Check transport connection first...
				if (transport == null || !transport.isConnected()) {
					if (transport != null) {
						try {
							transport.close();
						}
						catch (Exception ex) {
							// Ignore - we're reconnecting anyway
						}
						transport = null;
					}
					try {
						transport = connectTransport();
					}
					catch (AuthenticationFailedException ex) {
						throw new MailAuthenticationException(ex);
					}
					catch (Exception ex) {
						// Effectively, all remaining messages failed...
						for (int j = i; j < mimeMessages.length; j++) {
							Object original = (originalMessages != null ? originalMessages[j] : mimeMessages[j]);
							failedMessages.put(original, ex);
						}
						throw new MailSendException("Mail server connection failed", ex, failedMessages);
					}
				}

				// Send message via current transport...
				MimeMessage mimeMessage = mimeMessages[i];
				try {
					if (mimeMessage.getSentDate() == null) {
						mimeMessage.setSentDate(new Date());
					}
					String messageId = mimeMessage.getMessageID();
					mimeMessage.saveChanges();
					if (messageId != null) {
						// Preserve explicitly specified message id...
						mimeMessage.setHeader(HEADER_MESSAGE_ID, messageId);
					}
					Address[] addresses = mimeMessage.getAllRecipients();
					transport.sendMessage(mimeMessage, (addresses != null ? addresses : new Address[0]));
				}
				catch (Exception ex) {
					Object original = (originalMessages != null ? originalMessages[i] : mimeMessage);
					failedMessages.put(original, ex);
				}
			}
		}
		finally {
			try {
				if (transport != null) {
					transport.close();
				}
			}
			catch (Exception ex) {
				if (!failedMessages.isEmpty()) {
					throw new MailSendException("Failed to close server connection after message failures", ex,
							failedMessages);
				}
				else {
					throw new MailSendException("Failed to close server connection after message sending", ex);
				}
			}
		}

		if (!failedMessages.isEmpty()) {
			throw new MailSendException(failedMessages);
		}
	}

doSend方法中調(diào)用的核心類就是Transport類,這個類的包名是javax.mail。spring不愧是集成大師,java自帶的mail功能經(jīng)過spring的標準化包裝就成了spring自身功能的一部分,再通過spring boot的包裝,用starter的方式再次做簡化,我們就能夠直接通過極簡的方式使用了。

當然,簡化的方法多種多樣,另外的一種形式的包裝就是使用helper類的方法,spring使用的就是MimeMessageHelper。在javax.mail在處理郵件的方式上,使用的是分而治之的辦法,不同的類處理不同的問題,所以看到很多的類在處理各種問題和情況。

怎么使用spring boot發(fā)郵件怎么使用spring boot發(fā)郵件

這種做法在實現(xiàn)功能上是很好的,把一個復雜的問題分解成若干個小問題,分別實現(xiàn)。但對使用的開發(fā)人員就談不上友好了,容易出現(xiàn)以下幾個問題:

  • 不直觀,調(diào)用者不知道從何下手

  • 查找麻煩,類太多而且功能分散,不容易找到對應的功能類

  • 關(guān)系復雜,經(jīng)常對要引用哪個類會很沒有把握,因為太多處理單一問題的類

  • 沒有統(tǒng)一的入口,上手難,很難脫離文檔直接使用

針對上述情況,spring通過MimeMessageHelper,把幾乎所有郵件發(fā)送需要處理的問題就集中到了這個類里面,使用方便又好找。下面是這個類所有的方法。

怎么使用spring boot發(fā)郵件怎么使用spring boot發(fā)郵件怎么使用spring boot發(fā)郵件

到此,關(guān)于“怎么使用spring boot發(fā)郵件”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

名稱欄目:怎么使用springboot發(fā)郵件
文章起源:http://jinyejixie.com/article46/ijcghg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈網(wǎng)站改版、網(wǎng)站設計公司、定制開發(fā)、網(wǎng)站營銷、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
长宁县| 长垣县| 隆回县| 苏尼特左旗| 陇南市| 黎平县| 禹城市| 翁源县| 汉中市| 霸州市| 营口市| 兴国县| 桑日县| 泰来县| 连城县| 东明县| 兴安县| 陆川县| 沈丘县| 兴和县| 南华县| 德保县| 乌兰浩特市| 浦江县| 班玛县| 洛隆县| 余江县| 故城县| 洪雅县| 营口市| 青阳县| 稻城县| 客服| 汤阴县| 城步| 封丘县| 凭祥市| 旬阳县| 神木县| 巧家县| 雷州市|