1. 程式人生 > >Java輪子-Java傳送qq郵件

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郵件通知

前言 &emsp;&emsp;國慶期間,據說是為了防止有人在重大節日發表不正當言論,很多可以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