Java輪子-Java傳送qq郵件
傳送郵件,首先就得搞清楚那堆不同的協議究竟是什麼?下面一段引用於網易
POP3
POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連線到Internet的郵件伺服器和下載電子郵件的電子協議。
它是因特網電子郵件的第一個離線協議標準,POP3允許使用者從伺服器上把郵件儲存到本地主機(即自己的計算機)上,同時刪除儲存在郵件伺服器上的郵件,而POP3伺服器則是遵循POP3協議的接收郵件伺服器,用來接收電子郵件的。
SMTP
SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP 協議屬於 TCP/IP 協議簇,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。SMTP 伺服器就是遵循 SMTP 協議的傳送郵件伺服器。
SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後才可以登入 SMTP 伺服器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是為了使使用者避免受到垃圾郵件的侵擾。
IMAP
IMAP全稱是Internet Mail Access Protocol,即互動式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。不同的是,開啟了IMAP後,您在電子郵件客戶端收取的郵件仍然保留在伺服器上,同時在客戶端上的操作都會反饋到伺服器上,如:刪除郵件,標記已讀等,伺服器上的郵件也會做相應的動作。所以無論從瀏覽器登入郵箱或者客戶端軟體登入郵箱,看到的郵件以及狀態都是一致的。
本文主要基於smtp協議來做的qq郵件的傳送。由上面的介紹已經得知,要想smtp發郵件,就得有三個東西:
1. 發件方郵箱地址。
2. 發件方smtp郵箱的密碼,這個密碼不是郵箱的密碼,你登入到qq郵箱,找到smtp功能,開啟之後,會給你生成一個,這個以後再說。
3. 收件方的地址
其中1和3比較容易獲取,2的獲取,首先你需要登入qq郵箱,然後點選設定-常規-賬戶,開啟smtp服務,然後點選那個生成授權碼,就可以得到2所說的密碼了。
好了,得到這些就可以寫程式碼了。
首先,在我的程式碼裡,先寫兩個pojo類,分別是郵件類和郵箱類,郵件類設定郵件的內容標題和你要發給的目的郵箱地址。而郵箱類則設定郵箱的一些屬性,如使用的協議型別,使用者名稱,密碼什麼的。這東西可以使用spring boot 從配置檔案裡讀,為了簡單一點兒,這裡就不寫了。直接寫死它。以下是pojo類程式碼。
package com.xxjz.sendemail;
import java.io.Serializable;
public class Mail implements Serializable {
private static final long serialVersionUID = -543077416549260588L;
private String sendTo;
private String subject;
private String text;
public String getSendTo() {
return sendTo;
}
public void setSendTo(String sendTo) {
this.sendTo = sendTo;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Mail() {
super();
}
}
package com.xxjz.sendemail;
import java.io.Serializable;
public class MailBox implements Serializable {
private static final long serialVersionUID = -543077416549260588L;
private String mailSmtpAuth; // SMTP伺服器驗證
private String mailSmtpHost; //SMTP伺服器
private String mailSmtpPort; //埠號,QQ郵箱給出了兩個埠
private String mailUser; //賬號
private String mailPassword; //密碼
public String getMailSmtpAuth() {
return mailSmtpAuth;
}
public void setMailSmtpAuth(String mailSmtpAuth) {
this.mailSmtpAuth = mailSmtpAuth;
}
public String getMailSmtpHost() {
return mailSmtpHost;
}
public void setMailSmtpHost(String mailSmtpHost) {
this.mailSmtpHost = mailSmtpHost;
}
public String getMailSmtpPort() {
return mailSmtpPort;
}
public void setMailSmtpPort(String mailSmtpPort) {
this.mailSmtpPort = mailSmtpPort;
}
public String getMailUser() {
return mailUser;
}
public void setMailUser(String mailUser) {
this.mailUser = mailUser;
}
public String getMailPassword() {
return mailPassword;
}
public void setMailPassword(String mailPassword) {
this.mailPassword = mailPassword;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
在傳送郵件之前,需要新增javax.mail這個依賴包。由於我使用maven專案,所以就直接上程式碼,在pom檔案中加入:
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
接下來就是傳送郵件的核心程式碼:
package com.xxjz.sendemail;
import java.util.Properties;
import javax.mail.Authenticator;
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;
import javax.mail.internet.MimeMessage.RecipientType;
public class SendMail {
private static volatile SendMail singleton = null;
private MailBox mailBox = new MailBox();
private Mail mail = new Mail();
private SendMail() {
}
public static SendMail getSingleton() {
if (singleton == null) {
synchronized (SendMail.class) {
if (singleton == null) {
singleton = new SendMail();
}
}
}
return singleton;
}
public void setProperties(MailBox b) {
this.mailBox = b;
}
public void setMail(Mail b) {
this.mail = b;
}
public void sendQQSmtpEmail() throws Exception {
// 建立Properties 類用於記錄郵箱的一些屬性
final Properties props = new Properties();
// 表示SMTP傳送郵件,必須進行身份驗證
props.put("mail.smtp.auth", mailBox.getMailSmtpAuth());
// 此處是SMTP伺服器
props.put("mail.smtp.host", mailBox.getMailSmtpHost());
// 埠號,QQ郵箱給出了兩個埠
props.put("mail.smtp.port", mailBox.getMailSmtpPort());
// 此處是你的賬號
props.put("mail.user", mailBox.getMailUser());
// 此處的密碼就是前面說的STMP密碼
props.put("mail.password", mailBox.getMailPassword());
// 構建授權資訊,用於進行SMTP進行身份驗證
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 使用者名稱、密碼
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用環境屬性和授權資訊,建立郵件會話
Session mailSession = Session.getInstance(props, authenticator);
// 建立郵件訊息
MimeMessage message = new MimeMessage(mailSession);
// 設定發件人
InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(form);
// 設定收件人的郵箱
InternetAddress to = new InternetAddress(mail.getSendTo());
message.setRecipient(RecipientType.TO, to);
// 設定郵件標題
message.setSubject(mail.getSubject());
// 設定郵件的內容體
message.setContent(mail.getText(), "text/html;charset=UTF-8");
// 最後傳送郵件
Transport.send(message);
}
}
好了,現在寫個測試類驗證一下把。
package com.xxjz.sendemail;
public class TEST {
public static void main(String[] args) throws Exception {
SendMail sendMail = SendMail.getSingleton();
MailBox mailBox = new MailBox();
Mail mail = new Mail();
mailBox.setMailSmtpAuth("true");
mailBox.setMailSmtpHost("smtp.qq.com");
mailBox.setMailSmtpPort("587");
mailBox.setMailUser("[email protected]");
mailBox.setMailPassword("geewtndcrvawqebe");
mail.setSendTo("[email protected]");
mail.setText("測試 * hello world\n");
mail.setSubject("測試test");
sendMail.setProperties(mailBox);
sendMail.setMail(mail);
sendMail.sendQQSmtpEmail();
}
}
先設定郵箱的屬性和郵件的內容,然後,傳送。。
效果圖,如圖所示:
我使用spring boot寫的,感興趣的小夥伴可以去GitHub上down下來看看,以下是地址:
https://github.com/zdxxinlang/SendEmailSpringBoot.git
相關推薦
java通過SMTP傳送QQ郵件的完全步驟
轉自: https://blog.csdn.net/qq422733429/article/details/51280020 java通過SMTP傳送QQ郵件的完全步驟 首先,我們需要開啟QQ郵箱的SMTP服務,因為QQ郵箱對於一般的使用者都是預設關閉SM
Java輪子-Java傳送qq郵件
傳送郵件,首先就得搞清楚那堆不同的協議究竟是什麼?下面一段引用於網易 POP3 POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連線到Internet的郵件伺服器和下載電子郵件的電子協議。 它是因特網電子
java傳送qq郵件
1.開啟POP3/SMTP協議 設定--》賬戶--》 2.新增依賴: <dependency > <groupId >javax.mail </groupId >
Java 通過SMTP實現傳送QQ郵件
在eclipse中建立專案,並把javax.amil.jar和commons-email-1.5,jar複製到專案中連結:https://pan.baidu.com/s/1sQjA1GEpKi6IJJRGHKxjeA 密碼:4ene新增步驟:1.首先在專案下建立一個資料夾,儲
獲取郵箱驗證碼倒計時+PHP傳送QQ郵件(未全)
程式碼: <?php/*傳送郵件方法*@param $to:接收者 $title:標題 $content:郵件內容*@return bool true:傳送成功 false:傳送失敗*/function sendMail($to,$title,$content) { // 這個PHPMailer
傳送QQ郵件
import com.sun.mail.util.MailSSLSocketFactory import javax.mail.* import javax.mail.internet.InternetAddress import javax.mail.internet.MimeBodyPart
PHPMailer實現後臺傳送QQ郵件
引言 PHPMailer是PHP的全功能電子郵件建立和傳輸類包,可以支援HTML格式的郵件內容,並且可以允許在沒有本地郵件伺服器的Windows平臺上傳送電子郵件。具體的詳細特點介紹可以看GitHub中的說明文件。 說明 最近在專案IT管理課上的專案中遇到了一個
使用python傳送qq郵件
在看flask,發現可以傳送郵件,然後感覺垃圾郵件是不是這樣發的,比著書沒敲對,找了幾個原始碼也沒弄對,然後賽賽讓我生氣,我決定要把垃圾郵件寫出來騷擾他 注意: 1. 安裝sendmail 2. 在QQ郵箱設定開啟SMTP,記住這個碼 3. # -*- coding: ut
spring-javamail傳送QQ郵件535錯誤
平常解決535問題:缺少授權碼或者沒有開啟服務二:雖然網上有很多例子但是我還是稍微提下1.如何獲取授權碼QQ郵箱-設定-客戶端設定--開啟POP/SMTP服務2.微信進行安全繫結 (也可以用手機號碼) 開啟安全登入後點選生成新密碼 就是你所需要 16位授權碼 將你的登入密碼
Python SMTP傳送QQ郵件
1、QQ郵箱開通SMTP許可權,並獲取授權碼 QQ郵箱---->設定---->賬戶---->開啟服務---->IMAP/SMTP服務---->獲取授權碼 傳送方和接收方都必須開通 2、傳送純文字郵件: import smtplib fro
詳解運用flask_mail傳送QQ郵件
1. 通過flask_mail 傳送QQ郵件,這裡使用到flask_mail外掛 進入自己虛擬環境:通過pip install flask_mail指令安裝即可。 2.初始化mail物件 3.flask_mail的配置: 進入QQ郵箱,進入賬戶,開啟相關服務 qq傳
C#呼叫Mail傳送QQ郵件
需要用到: 1.System.Net.Mail; 2.QQ郵箱的POP3/SMTP服務碼 QQ郵箱的POP3/SMTP服務碼獲取方法: 1.開啟qq郵箱: 2.進入設定頁面--》賬戶:(往下翻)開啟服務POP3/SMTP服務,QQ郵箱會給一個POP3/SMTP服務碼儲存下
Python3抓取頁面資訊,網路程式設計,簡單傳送QQ郵件
資料收集,資料整理,資料描述,資料分析 # coding=utf-8 import sys import urllib.request req = urllib.request.Request(
CentOS配置mailx通過465埠傳送qq郵件
一、關閉其他的郵件工具 傳送的郵件用到mailx就可以了,其他可以關閉。CentOS6.8預設安裝的是postfix。 chkconfig postfix off #關閉開機啟動 service postfix stop #關閉服務執行 chkconfig
Odoo10 關於無法傳送QQ郵件的問題(501)
想在ODOO10中進行對銷售單內的客戶傳送郵件時遇到了問題 我的郵件是通過QQ郵箱傳送,(xxxx.qq.com),在QQ郵箱中配置好了SMTP和POP之後獲取到了授權碼 但是傳送郵件的時候總是
Python 傳送QQ郵件
#coding:utf-8 from email.mime.text import MIMEText from email.header import Header from smtplib i
ping通谷歌後傳送QQ郵件通知
前言   國慶期間,據說是為了防止有人在重大節日發表不正當言論,很多可以kxsw的ip都被封了,可是什麼時候才會解封呢,不能沒事就去ping一下吧,所以我寫了個定時任務,定時ping谷歌伺服器,如果ping通則發郵件通知,來看看是怎麼做的吧! ## Ping工具類 &a
電子郵件協議及GO傳送QQ郵件
[TOC] ### 一、電子郵件的工作機制 ![image-20200531204042406](https://img2020.cnblogs.com/blog/1496926/202005/1496926-20200531224213873-879729387.png) 提供電子郵件服務的協議叫
java程式實現QQ郵件的傳送:
1.要想遠端登入QQ必須做如下處理:參考如下: 通過以上文章可以實現用telnet工具命令列發qq郵件。 2.如果telnet命令不可識別:以下是win10安裝telnet方法參考如下: 3.java實現: package com.cl.socket2_12;
一、JAVA傳送簡單郵件(QQ郵箱為例)
以QQ郵箱為例 1.匯入jar包:## <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> &l