日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java发邮件-QQ服务器认证

發布時間:2024/4/17 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java发邮件-QQ服务器认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Java發郵件的幾種方式

  • JavaMail
  • Commons Email
  • Spring Mail

JavaMail是Java提供的發郵件API

Commons Email是Apache Commons下的發郵件API

Spring Mail 是Spring提供的發郵件API

所需jar包

JavaMail

<dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version></dependency> 1 2 3 4 5

Commons Email

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.4</version></dependency> 1 2 3 4 5

Spring Mail

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.4.RELEASE</version> </dependency> 1 2 3 4 5

以Spring Mail發郵件為例

Spring配置文件如下

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 加載mail.properties配置文件 --> <context:property-placeholder location="classpath:mail.properties" file-encoding="utf-8" ignore-unresolvable="true"/> <!-- mailSender配置 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> </props> </property> </bean> </beans> 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

mail.properties配置文件如下

#------------------------------------------------------------ # 郵件服務的配置 #------------------------------------------------------------ #服務器 mail.smtp.host=smtp.xxx.com #是否需要驗證密碼 mail.smtp.auth=true #超時時間 mail.smtp.timeout=50000 #------------------------------------------------------------ # 對用戶名和密碼都進行了加密 #------------------------------------------------------------ #登陸用戶名 mail.smtp.username=qBFXEAFr500QuCYz1D9/nw== #密碼 mail.smtp.password=oqfyI44bbowwVRY0dSKX6yuDKF3s6J9K #發件人 mail.smtp.from=abcd@xxx.com #收件人 mail.smtp.to=ghi@xxx.com,jkl@xxx.com #抄送 #mail.smtp.cc=abc@xxx.com,def@xxx.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

發郵件類

package com.test.mail; public interface MailSender { public void sendMail(); } 1 2 3 4 5

實現類

package com.test.mail.impl; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import com.test.mail.MailSender; import com.test.util.PropertiesUtil; /*** 采用Spring的JavaMailSender發郵件* * @author gaowei.cheng 2015年12月23日*/ @Component public class SpringMail implements MailSender { private static Logger log = Logger.getLogger(SpringMail.class); //注入一個mailSender @Autowired JavaMailSenderImpl mailSender; public void sendMail() { //讀取配置文件中的收件人 PropertiesUtil.readProperties("mail.properties");String[] to = PropertiesUtil.getProperty("mail.smtp.to").split(",");// 收件人 String[] cc = PropertiesUtil.getProperty("mail.smtp.cc").split(",");// 收件人 MimeMessage mailMessage = mailSender.createMimeMessage();log.info("發送郵件給" + PropertiesUtil.getProperty("mail.smtp.to")); try {MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true, "utf-8");helper.setFrom(propUtil.getProperty("mail.smtp.from"));// 設置發件人 helper.setTo(to);// 設置收件人 helper.setCc(cc);// 設置抄送 helper.setSubject("SpringMail測試");// 設置主題 helper.setText("這是一封來自SpringMail的測試郵件");// 郵件體 mailSender.send(mailMessage);// 發送郵件 log.info("郵件發送成功...");} catch (Exception e) {log.error("郵件發送發生異常");log.error(e.getMessage());log.info("進行重發"); try {Thread.sleep(1000 * 1000); this.sendMail();} catch (InterruptedException e1) {log.info("重發郵件發生異常");log.error(e.getMessage());e1.printStackTrace();}}} } 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

如果是自己公司內部的郵件服務器,這個程序是沒有任何問題的。
但當我們使用QQ郵箱盡心登陸,然后發郵箱時會報錯,錯誤信息如下

503 Error

Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28

這是因為騰訊需要認證,才用平時的QQ郵箱用戶名和密碼已經不能登陸了。

解決辦法

進入報錯時,騰訊給的網址http://service.mail.qq.com/cgi-bin/help?id=28
就會進入客戶端設置頁面

什么是客戶端?
答:在騰訊看來,所有不是通過騰訊頁面或者客戶端登陸的都屬于客戶端。

所以現在問題已經很清晰了,在我們用程序發送電子郵件的時候,我們的密碼已經不能用了,需要采用騰訊的授權碼登陸

如何獲取授權碼?
答:跟著騰序的幫助中心一步一步來!

授權碼的獲取

什么是授權碼?

授權碼是QQ郵箱推出的,用于登錄第三方客戶端的專用密碼。 適用于登錄以下服務:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務。

通過以上可以看出,我們的程序登陸,發郵件采用的是SMTP協議,所以就必須采用授權碼登陸了。

如何獲取?

登陸qq郵箱

1、進入設置

2、進入賬戶

3、下拉到這里

點擊開啟

按照操作一步一步開啟

開啟完成之后就會得到一個授權碼

所有程序登陸都次啊用授權碼登陸

而且mailSender也要進行相應的修改

<!-- mailSender配置,qq需要SSL --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.smtp.host}" /> <property name="port" value="${mail.smtp.port}" /> <property name="username" value="${mail.smtp.username}" /> <property name="password" value="${mail.smtp.password}" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop> <prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop> <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> <prop key="mail.smtp.socketFactory.fallback">false</prop> </props> </property> </bean> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

其他配置信息如下

#端口號,QQ郵箱需要使用SSL,端口號465或587 mail.smtp.port=465 #STARTTLS是對純文本通信協議的擴展。它提供一種方式將純文本連接升級為加密連接(TLS或SSL) mail.smtp.starttls.enable=true mail.smtp.password=你的授權碼 1 2 3 4 5

這樣就可以登陸QQ郵箱發郵件了!

關于發郵件,改天再詳細的寫出來。

參考文獻

http://wangcheng.iteye.com/blog/603908

http://blog.csdn.net/is_zhoufeng/article/details/12004073

轉載于:https://my.oschina.net/sky2008/blog/611028

總結

以上是生活随笔為你收集整理的Java发邮件-QQ服务器认证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。