国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用Java實現(xiàn)發(fā)送郵件——Java Email

這篇具有很好參考價值的文章主要介紹了用Java實現(xiàn)發(fā)送郵件——Java Email。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

????????眾所周知,Email就是郵件,在科技高速發(fā)展的今天我們也使用了非常之久的電子郵件,我們熟知的郵件有自己的QQ郵箱、網(wǎng)易郵箱大師還有Outlook等都是用來發(fā)送郵件的,而用Java程序也是可以用來發(fā)送郵件的。

郵件

首先我們先對比一下傳統(tǒng)的郵件信息是如何發(fā)送的:傳統(tǒng)郵件是將郵件放入到郵箱中,再通過郵局發(fā)往目的地所在的郵局,再由郵遞員送到收件人的手中。這和我們現(xiàn)在的快遞是同樣的道理。

用Java實現(xiàn)發(fā)送郵件——Java Email

而電子郵件的原理也是類似的,只不過是把普通郵局換成了電子的,先發(fā)送到郵件服務(wù)器中,再經(jīng)過若干個郵件服務(wù)器的中轉(zhuǎn)之后,最后發(fā)送到收件人的郵箱中。效果類似上圖。

郵件協(xié)議

1.SMTP

????????SMTP的全稱是“Simple?Mail?Transfer?Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳輸郵件的準(zhǔn)備規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP協(xié)議簇,它幫助每臺計算機(jī)在發(fā)送或中轉(zhuǎn)信件時找到下一個目的發(fā)送地。SMTP?服務(wù)器就是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器。SMTP認(rèn)證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄SMTP服務(wù)器,這就使得那些垃圾郵件的散播者無可乘之機(jī)??稍黾覵MTP認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_。

2.POP3

????????POP3是Post?Office?Protocol?3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機(jī)連接到Intenet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(jī)(即自己的計算機(jī))上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。

3.IMAP

????????IMAP全稱是Internet?Mail?Access?Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標(biāo)準(zhǔn)協(xié)議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務(wù)器上,同時在客戶端上的操作都會反饋到服務(wù)器上,如:刪除郵件,標(biāo)記已讀等,服務(wù)器上的郵件也會做相應(yīng)的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。

4.了解POP3與IMAP之間的不同?

????????POP3協(xié)議允許電子郵件客戶端下載服務(wù)器上的郵件,但是在客戶端的操作(如移動郵件、標(biāo)記已讀等),不會反饋到服務(wù)器上,比如通過客戶端收取了郵箱中的3封郵件并移動到其他文件夾,郵箱服務(wù)器上的這些郵件是沒有同時被移動的。
????????IMAP提供webmail?與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到服務(wù)器上,對郵件進(jìn)行的操作,服務(wù)器上的郵件也會做相應(yīng)的動作。

以126郵件為例,相應(yīng)的協(xié)議會有相關(guān)的協(xié)議端口

服務(wù)器名稱 服務(wù)器地址 SSL協(xié)議端口號 非SSL協(xié)議端口號
SMTP smtp.126.com 993 143
IMAP imap.126.com 465/994 25
POP3 pop.126.com 995 110

發(fā)送郵件的準(zhǔn)備工作

? ? ? ? 本文使用的是網(wǎng)易郵箱126,可以以自行申請,在使用之前要在網(wǎng)易郵箱的設(shè)置里的"POP3/SMTP/IMAP"里開啟服務(wù),二者選一即可。

用Java實現(xiàn)發(fā)送郵件——Java Email

?還要在下拉界面開啟授權(quán)密碼管理,點(diǎn)擊"新增授權(quán)密碼",界面會顯示你的密碼,為了更好的記住,可以選擇文本進(jìn)行保存,當(dāng)你不再使用時,可以點(diǎn)擊刪除按鈕,之后此密碼將會失效,不能再進(jìn)行登錄。用Java實現(xiàn)發(fā)送郵件——Java Email

?代碼實現(xiàn)郵件發(fā)送

public class Demo01 {
	public static void main(String[] args) {
		// SMTP服務(wù)器地址
		String smtp = "stmp.126.com";
		
		// 郵箱賬號和密碼(授權(quán)密碼)
		String userName = "*********";
		String password = "*********";
		
		// SMTP服務(wù)器的連接信息
		Properties props = new Properties();
		props.put("mail.smtp.host", smtp); // SMTP主機(jī)號
		props.put("mail.smtp.port", "25"); // 主機(jī)端口號
		props.put("mail.smtp.auth", "true"); // 是否需要認(rèn)證
		props.put("mail.smtp.starttls.enable", "true"); // 啟用TLS加密
		
		// 創(chuàng)建Session
		// 參數(shù)1:SMTP服務(wù)器的連接信息
		// 參數(shù)2:用戶認(rèn)證對象(Authenticator接口的匿名實現(xiàn)類)
		Session session = Session.getInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, password);
			}
		});
		
		// 開啟調(diào)試模式
		session.setDebug(true);
		
		System.out.println(session);
	}
}

當(dāng)發(fā)送郵件時,我們每次都要先創(chuàng)建Session,再輸入郵箱的賬號密碼,建立連接信息,過于繁瑣,所以我們可以在這里創(chuàng)建一個JavaMailUtils類,每次創(chuàng)建連接時,只需要調(diào)用JavaMailUtils類里的createsession()方法即可,大大減少了代碼的冗余。

public class JavaMailUtils {

	public static Session createsession() {
		// SMTP服務(wù)器地址
		String smtp = "smtp.126.com";
		
		// 郵箱賬號和密碼(授權(quán)密碼)
		String userName = "**********";
		String password = "**********";
		
		// SMTP服務(wù)器的連接信息
		Properties props = new Properties();
		props.put("mail.smtp.host", smtp); // SMTP主機(jī)號
		props.put("mail.smtp.port", "25"); // 主機(jī)端口號
		props.put("mail.smtp.auth", "true"); // 是否需要認(rèn)證
		props.put("mail.smtp.starttls.enable", "true"); // 啟用TLS加密
		
		// 創(chuàng)建Session
		// 參數(shù)1:SMTP服務(wù)器的連接信息
		// 參數(shù)2:用戶認(rèn)證對象(Authenticator接口的匿名實現(xiàn)類)
		Session session = Session.getInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(userName, password);
			}
		});
		
		// 開啟調(diào)試模式
		session.setDebug(true);
		
		return session;
	}
}

?發(fā)送普通郵件

? ? ? ? 首先,我們還是要創(chuàng)建Session,當(dāng)然這次我們只需調(diào)用JavaMailUtils的createsession()方法 就行。然后創(chuàng)建Message對象,因為Message類是一個抽象類,所以我們只能創(chuàng)建其子類對象,然后將session傳入。

接著調(diào)用setFrom()方法選擇發(fā)件人,setRecipient()方法選擇收件人,setSubject()方法選擇輸入郵件的標(biāo)題,setText()方法輸入郵件的正文,最后通過Transport的send()方法完成發(fā)送郵件。

在setRecipient()這個方法中,我們可以通過RecipientType枚舉類提供的常量進(jìn)行選擇,RecipientType.TO代表收件人,RecipientType.CC代表抄送人。

注意:登錄名和發(fā)送人的郵件保持一致,否則可能會使得郵件發(fā)送失敗。

public class Demo02 {
	public static void main(String[] args) {
		try {
			// 1.創(chuàng)建Session
			Session session = JavaMailUtils.createsession();
			
			// 2.創(chuàng)建郵件對象(Message抽象類的子類對象)
			MimeMessage msg = new MimeMessage(session); // 傳入session
			msg.setFrom(new InternetAddress("*********")); // 發(fā)件人
			msg.setRecipient(RecipientType.TO, new InternetAddress("*********")); // 收件人
            msg.setRecipient(RecipientType.CC, new InternetAddress("*********")); // 抄送人
			msg.setSubject("這是一封來自好友的郵件","utf-8"); // 標(biāo)題
			msg.setText("愿世界和平!","utf-8"); // 正文
			
			// 3.發(fā)送
			Transport.send(msg);
			
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

發(fā)送正文帶有"html"標(biāo)簽的郵件

可以在需要修改的內(nèi)容前后加上html的修飾符進(jìn)行修改。

例:<b>世界</b> 可以讓"世界"兩個字加粗。

public class Demo03 {
	public static void main(String[] args) {
		try {
			// 1.創(chuàng)建Session
			Session session = JavaMailUtils.createsession();
			
			// 2.創(chuàng)建郵件對象(Message抽象類的子類對象)
			MimeMessage msg = new MimeMessage(session); // 傳入session
			msg.setFrom(new InternetAddress("*********")); // 發(fā)件人
			msg.setRecipient(RecipientType.TO, new InternetAddress("*********")); // 收件人
            msg.setRecipient(RecipientType.CC, new InternetAddress("*********")); // 抄送人
			msg.setSubject("這是一封來自好友的郵件","utf-8"); // 標(biāo)題

			// 郵件正文中包含有“html”標(biāo)簽(控制文本的格式)
			msg.setText("<b>世界</b>和平!","utf-8","html"); // 正文
			
			// 3.發(fā)送
			Transport.send(msg);
			
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

發(fā)送帶有附件的郵件

想發(fā)送帶有附件的郵件,我們還要創(chuàng)建郵件內(nèi)容"復(fù)合"對象,Multipart類的MimeMultipart實現(xiàn)類,然后再創(chuàng)建BodyPart類的MimeBodyPart實現(xiàn)類,textPart用于存儲正文內(nèi)容,調(diào)用setContent()方法,參數(shù)1為正文內(nèi)容,參數(shù)2為內(nèi)容類型;字符編碼集。imagePart用于存儲附件(本文的附件以圖片為例),先調(diào)用setFileName()方法設(shè)置附件文件的顯示名稱(顯示名稱可以與圖片原名不一致),再調(diào)用setDataHandler(),其中添加一個DataHandler()方法,使用Files工具類的readAllBytes()方法,可以把文件讀取成字節(jié)數(shù)據(jù), 最后,通過setContent()把Multipart添加到Message中,即可發(fā)送郵件。

如果我們需要抄送多個人一起發(fā)送時,可以選擇通過創(chuàng)建一個InternetAddress[]數(shù)組把多個抄送人存入。

public class Demo04 {
	public static void main(String[] args) {
		try {
			// 1.創(chuàng)建Session
			Session session = JavaMailUtils.createsession();
			
			// 2.創(chuàng)建郵件對象(Message抽象類的子類對象)
			MimeMessage msg = new MimeMessage(session); // 傳入session
			msg.setFrom(new InternetAddress("*********")); // 發(fā)件人
			msg.setRecipient(RecipientType.TO, new InternetAddress("*********")); // 發(fā)送人
			msg.setRecipients(RecipientType.CC, new InternetAddress[] {
					new InternetAddress("*********"),
					new InternetAddress("*********"),
					new InternetAddress("*********"),
			});

			msg.setSubject("這是一封來自好友的郵件","utf-8"); // 標(biāo)題
			
			// 3.郵件內(nèi)容"復(fù)合"對象
			Multipart multipart = new MimeMultipart();
			
			// 正文
			BodyPart textPart = new MimeBodyPart();
			// 參數(shù)1:正文內(nèi)容
			// 參數(shù)2:內(nèi)容類型;字符編碼集
			textPart.setContent("<b>世界</b>和平!?。?, "text/html;charset=utf-8");
			
			// 附件
			BodyPart imagePart = new MimeBodyPart();
			imagePart.setFileName("look.jpg"); // 設(shè)置附件文件的顯示名稱
			// 數(shù)據(jù)處理對象(讀取附件文件從本地磁盤進(jìn)行讀取)
			imagePart.setDataHandler(
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(Paths.get("D:\\net\\2.jpg")), 
									"application/octet-stream")));
			
			// 添加至郵件內(nèi)容
			multipart.addBodyPart(textPart); // 添加正文
			multipart.addBodyPart(imagePart); // 添加附件
			
			// 設(shè)置郵件內(nèi)容
			msg.setContent(multipart);
			
			// 3.發(fā)送
			Transport.send(msg);
			
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

發(fā)送正文帶有內(nèi)嵌的郵件

我們可以選擇在郵件正文部分中用<img src=" cid=附屬名">,附件名通過.setHeader("Content-ID", "<別名>")的方法設(shè)置。文章來源地址http://www.zghlxwxcb.cn/news/detail-448217.html

public class Demo05 {
	public static void main(String[] args) {
		try {
			// 創(chuàng)建Session
			Session session = JavaMailUtils.createsession();
			
			// 創(chuàng)建郵件
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress("*********"));
			msg.setRecipient(RecipientType.TO, new InternetAddress("*********"));
			msg.setRecipients(RecipientType.CC, new InternetAddress[] {
					new InternetAddress("*********"),
					new InternetAddress("*********"),
					new InternetAddress("*********"),
			});
			msg.setSubject("愛永不凋零!","utf-8");
			
			// 郵件正文部分
			BodyPart textBodyPart = new MimeBodyPart();
			StringBuilder body = new StringBuilder();
			body.append("<h1>世界和平</h1>");
			body.append("<img src=\"cid:jue\"/>"); // 通過內(nèi)容ID引用附件圖片
			textBodyPart.setContent(body.toString(), "text/html;charset=utf-8");
			
			// 郵件附件部分
			BodyPart imageBodyPart = new MimeBodyPart();
			imageBodyPart.setFileName("son.jpg"); // 讀取名稱
			imageBodyPart.setDataHandler( // 讀取附件內(nèi)容
					new DataHandler(
							new ByteArrayDataSource(
									Files.readAllBytes(Paths.get("D:\\net\\1.jpg")),
									"application/octet-stream")));
			imageBodyPart.setHeader("Content-ID", "<jue>");
			
			// 組合正文+附件
			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(textBodyPart); // 添加正文部分
			multipart.addBodyPart(imageBodyPart); // 添加附件部分
			
			// 設(shè)置郵件內(nèi)容
			msg.setContent(multipart);
			
			// 發(fā)送
			Transport.send(msg);
			
		} catch (MessagingException | IOException e) {
			e.printStackTrace();
		}
		
	}
}

到了這里,關(guān)于用Java實現(xiàn)發(fā)送郵件——Java Email的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 100天精通Python丨辦公效率篇 —— 11、Python自動化操作 Email(發(fā)送郵件、收郵件、郵箱客戶端)

    大家好,我是你們的好朋友西紅柿!今天咱們聊一聊關(guān)于Python怎么操作郵件的問題。這可是十分有用的技能啊,偏偏很多小伙伴們并不知道,還得費(fèi)盡周折地查找資料呢。幸好我這個聰明伶俐的小家伙會給你們支招,讓你們又快又好地掌握這門技能! 首先,你要掌握以SMTP協(xié)

    2023年04月17日
    瀏覽(20)
  • 郵件處理控件 Aspose.Email For Java 授權(quán)須知

    Aspose.Email 是用于輕松的開發(fā)?email?功能的應(yīng)用程序的一組控件,基于 ?ASP.NET?的Web應(yīng)用、Web服務(wù)和Windows?應(yīng)用。支持?Outlook?PST,?EML,?MSG,?and?MHT?格式.?允許開發(fā)者直接與?SMTP,?POP,?FTP,?和?MS?Exchange?服務(wù)器進(jìn)行工作。支持郵件合并、行事歷、定制郵件標(biāo)題和內(nèi)容、嵌入文

    2024年02月16日
    瀏覽(20)
  • java實現(xiàn)發(fā)送郵件

    java實現(xiàn)發(fā)送郵件

    本文介紹下java實現(xiàn)郵件的發(fā)送,意在網(wǎng)站用戶評論時能夠及時通知站長和用戶評論被回復(fù)后能夠及時通知用戶。 下文介紹下具體實現(xiàn)。 java實現(xiàn) 首先引入springboot的郵箱依賴 配置郵箱參數(shù),這里以 qq郵箱 作為示例 此時就差不多了,接下來實現(xiàn)郵箱工具類 此時調(diào)用 MailUtil 里

    2024年02月16日
    瀏覽(19)
  • springboot(java)使用javamail實現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除

    最近在弄郵件相關(guān)的功能,被搞的頭大,很多找的方法根本不知道該怎么往下走,就目前為止, 經(jīng)過各種的碰壁和失敗,就整理出來如何使用javamail實現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除 不單單是分享,也為我后續(xù)查找更方便做一個記錄 在正式發(fā)送郵件之前,我們應(yīng)該對郵件

    2024年02月04日
    瀏覽(24)
  • ews java + Oauth2實現(xiàn)office 365發(fā)送郵件

    引入maven包: com.microsoft.ews-java-api ews-java-api 2.0 使用office 365郵箱服務(wù)收發(fā)郵件有兩種校驗方式,一種是老的basic authentication, 這種方式目前已不建議使用,如下使用的是userName, password進(jìn)行驗證的方式。 public static boolean sendExchange(MailConfig mailInfo) { // The Exchange Server Version. 最新推

    2024年02月09日
    瀏覽(28)
  • JAVA之發(fā)送郵件

    一、導(dǎo)入依賴 二、發(fā)送普通文本 三、發(fā)送附件 一、導(dǎo)入依賴 二、發(fā)送普通文本 三、發(fā)送附件 方法一:通過POI讀取數(shù)據(jù)庫的數(shù)據(jù),并生成excel,但不保存在本地文件,通過流的方式,作為附件并發(fā)送郵件 主要的代碼如下: 全部代碼如下: 方法二:將導(dǎo)出的數(shù)據(jù)生成文件,

    2024年02月13日
    瀏覽(21)
  • java ssl加密發(fā)送郵件

    通過25端口發(fā)送郵件不安全,改為ssl加密方式發(fā)送郵件,比較常見的2中實現(xiàn)類發(fā)送郵件如下所示。 使用該實現(xiàn)類發(fā)送郵件,ssl加密使用端口號為465,借助Properties類設(shè)置ssl的各種配置。 網(wǎng)上資料較少,自己記錄一下。 修改application.yml文件配置 至于能否都采用第二種方式來實

    2024年02月12日
    瀏覽(17)
  • Java發(fā)送郵件一行代碼解決

    Java發(fā)送郵件一行代碼解決

    今天博主帶來一期超詳細(xì)的郵件發(fā)送實操內(nèi)容,希望能get到您的點(diǎn)贊!話不多說,直接進(jìn)入正題。 在實踐開始前,這里需要提到 Hutool ,Hutool是一個小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率的工具類。 那么現(xiàn)在正式進(jìn)入實戰(zhàn)!首先創(chuàng)

    2024年02月02日
    瀏覽(26)
  • Java發(fā)送郵件 啟用SSL

    Java發(fā)送郵件 啟用SSL

    使用的maven依賴: 配置文件 mail.properties 如下: 在Foxmail的配置如下: 代碼如下:

    2024年04月26日
    瀏覽(24)
  • java 發(fā)送html 格式的郵件

    在 Java 中,可以使用 JavaMail API 來發(fā)送 HTML 格式的郵件。下面是一個簡單的示例代碼: 在上面的代碼中,首先設(shè)置了收件人、發(fā)件人、發(fā)件人密碼和郵件服務(wù)器的信息。然后設(shè)置了系統(tǒng)屬性,包括郵件服務(wù)器、SMTP 認(rèn)證、SMTP 端口和 SSL 連接。接著創(chuàng)建一個默認(rèn)的 Session 對象,

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包