1. 程式人生 > >【Java郵件開發】5.編寫一個JavaMail傳送郵件的程式

【Java郵件開發】5.編寫一個JavaMail傳送郵件的程式

之前我們對JavaMail的API進行了簡單的介紹,並下載了相應的jar包。
這次,我們要著手使用JavaMail開發一個可以傳送郵件的程式。

1.建立工程
首先我們在Eclipse中新建一個名為JavaMailTest的工程:



然後我們新建一個lib資料夾,將mail.jar放入資料夾中,然後右鍵選擇
Build Path-->add to build path將其引入開發環境中:


在工程中新建一個位於cn.com.javamail包下的類,名為JavaMailTest1:


2.編寫程式碼
我們在JavaMailTest1類中建立一個main函式:
package cn.com.javamail;

public class JavaMailTest1 {
	public static void main(String[] args) {
		
	}
}

我們要編寫傳送郵件的程式,就必須先建立一封郵件,我們來編寫建立郵件
資訊的程式碼。

使用JavaMail傳送一封簡單郵件的步驟:
(1)建立代表郵件伺服器的網路連線資訊的Session物件。
(2)建立代表郵件內容的Message物件
(3)建立Transport物件、連線伺服器、傳送Message、關閉連線。

我們的程式碼編寫如下:
package cn.com.javamail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaMailTest1 {
	
	public static int ReceivedCount=1;//接收郵件地址的陣列大小
	
	public static void main(String[] args) throws MessagingException {
		
		//1.建立資訊配置物件,並配置相應資訊
		Properties props = new Properties();
		//屬性mail.debug是確定是否是開發模式,true為是,false為否
		//屬性mail.transport.protocol設定要使用的郵件協議
		//屬性mail.smtp.auth設定傳送時是否校驗使用者名稱和密碼
		//還有其他屬性,請檢視相關文件
		props.setProperty("mail.debug", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.smtp.auth", "true");
		
		//2.通過配置資訊建立session對像
		Session session = Session.getInstance(props);
		//session設定dbug的時候會將整個郵件互動過程資訊列印早控制檯
		session.setDebug(true);
		
		//3.通過session物件獲取Message郵件資訊物件
		Message msg = new MimeMessage(session);
		//設定郵件資訊物件的各種欄位資訊
		msg.setText("你好朋友!");//郵件正文
		msg.setFrom(new InternetAddress("
[email protected]
"));//郵件接收地址 //3.獲取傳輸物件,進行郵件傳送 Transport transport= session.getTransport(); //連線資訊:郵件伺服器地址,埠號,使用者名稱,密碼 transport.connect("smtp.sina.com",25,"emailtest3087", "123qwe"); //建立郵件接收地址陣列,並放置一個郵箱接收地址。 Address [] addresies=new Address[ReceivedCount];//陣列大小為上面的成員變數指定 addresies[0]=new InternetAddress("
[email protected]
"); transport.sendMessage(msg,addresies); //4.關閉傳輸物件 transport.close();//關閉傳輸物件 } }

執行結果:
DEBUG: JavaMail version 1.4.7
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: setDebug: JavaMail version 1.4.7
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-32.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25


EHLO LAPTOP-79JCNN74
250-smtp-2-32.smtpsmail.fmail.yf.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
250 ok
RCPT TO:<[email protected]>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email protected]
DATA
354 End data with <CR><LF>.<CR><LF>
From: [email protected]
Message-ID: <1311159931.0.1492350927193.JavaMail."wuliII"@LAPTOP-79JCNN74>
MIME-Version: 1.0
Content-Type: text/plain; charset=GBK
Content-Transfer-Encoding: base64


xOO6w8Xz09GjoQ==
.
250 ok queue id 249384396005
QUIT
221 smtp-2-32.smtpsmail.fmail.yf.sinanode.com

分析結果:
其中,我們可以看到,程式首先連線了位於25號埠的sina的SMTP伺服器:
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-32.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25

然後進行了auth驗證,驗證了使用者名稱和密碼是否正確:
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded

通過succeeded可以看到連線是通過的。然後就是組裝郵件資訊:
MAIL FROM:<[email protected]>
250 ok
RCPT TO:<[email protected]>
250 ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email protected]
DATA
354 End data with <CR><LF>.<CR><LF>
From: [email protected]
Message-ID: <1311159931.0.1492350927193.JavaMail."wuliII"@LAPTOP-79JCNN74>
MIME-Version: 1.0
Content-Type: text/plain; charset=GBK
Content-Transfer-Encoding: base64

之後成功傳送郵件,並推出傳送郵箱:
250 ok queue id 249384396005
QUIT

我們登入126郵箱,看一下我們是否收到郵件:

發現郵件成功投遞到我們的126測試郵箱!

至此,我們的入門級JavaMail傳送郵件的程式就編寫完畢了。

相關推薦

Java郵件開發5.編寫一個JavaMail傳送郵件程式

之前我們對JavaMail的API進行了簡單的介紹,並下載了相應的jar包。 這次,我們要著手使用JavaMail開發一個可以傳送郵件的程式。 1.建立工程 首先我們在Eclipse中新建一個名為JavaMailTest的工程: 然後我們新建一個lib資料夾,將mail

微信開發02.搭建一個屬於自己的微信公眾平臺

tro 投票 新浪 關系 blank 訂閱 logs name 開發者 閱讀目錄 【網站開發】在新浪SAE上搭建一個博客 概述   公司年會上同事開發了一個微信企業號,包含了投票,抽獎,祝福墻功能,還開了一個Session,跟我們講了下公司的企業號開發過程和抽獎中獎

Java Web開發關於資料庫的操作

1.mysql連線資料庫並建立資料庫連線物件 第一種: Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/javaweb?user=root&password=welcom123");

Java程式設計思想5.初始化與清理

構造器就是在建立物件的時候被自動呼叫的特殊方法。 Java 在提供構造器的基礎上,額外提供“垃圾回收器”。控制物件從生命週期開始到結束。 5.1 用構造器確保初始化 建立物件時,Java 會在使用者有能力操作物件之前自動呼叫構造器,保證初始化進行。 5.2

java學習記錄5.輸入年月日,計算其為當年的第幾天

public class Compute_Year_Month_Day {public static void main(String args[]){Scanner sc = new Scanner(System.in);//輸入年份System.out.print("請輸

java學習記錄7.定義一個介面ArearInterface,其中包含一個方法,計算面積三角形、矩形、圓形的面積

* 定義一個介面ArearInterface,其中包含一個方法,計算面積 * 定義三個類:三角形、矩形、圓形,分別實現ArearInterface中的方法 * 定義一個主類,將三角形和圓形的面積顯示在螢幕上ArearInterface 介面public interface A

Java OGR開發如何建立空的向量shapfile檔案

目的:使用GDAL建立空的向量圖層檔案,圖層型別可知,空間參考不可知,無要素; 起初,使用以下程式碼建立圖層,但當加入到ArcMap中時,報錯: could not open the specified file ogr.RegisterAll(); /

java介面開發---與Android對接註冊介面的session會話保持問題

技術渣,遇到問題記錄一下,好記性不如爛筆頭嘛(應該是好記性不如寫部落格~~~~~~) 【問題】          在java後臺寫了獲取驗證碼和註冊的兩個介面,提供給ios和Android呼叫。ios測試註冊過程中都是一條過,但是Android就出現了很尷尬的問題【第一次

java學習記錄2.定義一個計算矩形面積、立方體和球體體積的類,該類完成計算的方法用靜態方法實現

area_volume類(計算矩形面積和立方體體積)public class area_volume {double length,width,heigth;//長:length,寬:width,高:heigtharea_volume(double length,double

Java Web開發資料庫及SQL/MySQL基礎

詳細課程連結:【Java Web開發】資料庫及SQL/MySQL基礎 —— 阿里雲大學 MySQL概述 什麼是資料庫 ?

Java編程建立一個簡單的JDBC連接-Drivers, Connection, Statement and PreparedStatement

code ava 語句 ole man for out 讀取 drop 本blog提供了一個簡單的通過JDBC驅動建立JDBC連接例程,並分別通過Statement和PreparedStatement實現對數據庫的查詢。在下一篇blog中將重點比較Statement與P

Java算法獲得一個隨機字符串

ring get exti class oid imp brush tint 類型 package suanfa; import java.util.Random; public class RandomStr { public static String get

shell編寫一個簡單的jmeter自動化壓測腳本

image tac vbo 用戶數 osx dot png das uvc 在公司做壓力測試也挺長時間了,每次測試前環境數據準備都需要話費較長時間,所以一直在考慮能不能將整個過程實現自動化進行,於是就抽空寫了一個自動化腳本,當然這個腳本目前功能十分簡陋,代碼也不完善,很有很

java規則引擎drools6.5.0版本中kmodule.xml解析

excel表格 兩個 狀態 excel表 自定義 roo 暫時 指定 一次 kmodule.xml文件存放在src/main/resources/META-INF/文件夾下。 1 <?xml version="1.0" encoding="UTF-8"?>

Android開發找樂,一個笑話App的制作過程記錄

override pbo rdm data root 恰恰 功能 sql htm 緣起 想做一個笑話App的原因是由於在知乎上看過一個帖子。做Android能夠有哪些數據能夠練手,裏面推薦了幾個數據開放平臺。在這些平臺中無一不是有公共的笑話接口,當時心

軟件測試-如何做一個開發人員看得起的測試人員

是否 sci 生產 安全 經理 一段 學習 語言 加密傳輸 以下文章來自一個測試人員感想大家可以看看。 做測試做了8年,前兩年做的是與硬件產品相關的測試,質量管理比軟件行業要嚴格的多的多,原因是,大部分的應用軟件代碼出錯,改下代碼重新編譯,打補丁,就ok了,而一旦硬件設計出

25、支付模組開發——將配置好的支付寶沙箱環境整合到我們的專案中以及支付介面的編寫

####1、將支付寶Demo中的相關檔案複製到我們的專案中: 首先,我們將Demo中src中的包及裡面的檔案複製到我們專案中 同樣,我們也要講zhifubao.properties這個配置檔案方法我們專案中的 resources目錄下: 加下來就是我們的jar包了~ 首先我們先在

23、支付模組開發——Java對接支付寶步驟(沙箱環境)

####1、下載匯入專案 https://docs.open.alipay.com/54/104506 開啟支付寶介面官網: 我們下載Java版Demo 下載之後解壓,然後我們用IDEA匯入這個Demo專案~ 然後,我們下載一個我們後面需要生成生成RSA金鑰的工具:https://d

26、支付模組開發——支付寶回撥函式實現和查詢使用者訂單狀態介面編寫

####1、支付寶回撥函式實現 我們在除錯支付寶沙箱環境的時候,支護寶會有一個回撥函式,也就是在支付成功之後,可以呼叫我們支付之後需要執行的相關方法,從而達到資料庫的資料和我們的操作相統一。 首先我們先在本地將回調函式編寫好~ 在OrderController類中新建我們的支付寶回撥函式

eclipse jar包編寫java程式碼時,為方便程式設計,常常會引用別人已經實現的方法,通常會封裝成jar包,我們在編寫時,只需引入到Eclipse中即可。

Eclipse中匯入外部jar包 在編寫java程式碼時,為方便程式設計,常常會引用別人已經實現的方法,通常會封裝成jar包,我們在編寫時,只需引入到Eclipse中即可。 工具/原料 Eclipse