使用Java發送電子郵件

我開始使用Java作為簡單的“如何發送電子郵件”來撰寫這篇文章,但是后來我發現我需要簡要解釋更多事情。 因此,這是有關使用Java發送電子郵件的所有摘要。

在Java SE平臺之外(但包含在JavaEE中), JavaMail軟件包提供了一個用于構建郵件和消息傳遞應用程序的平臺。 讓我們舉一個例子。

發送一條簡單的短信

// Common variables
String host = "your_smtp_server";
String from = "from_address";
String to = "to_address";// Set properties
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "true");// Get session
Session session = Session.getInstance(props);try {// Instantiate a messageMessage msg = new MimeMessage(session);// Set the FROM messagemsg.setFrom(new InternetAddress(from));// The recipients can be more than one so we use an array but you can// use 'new InternetAddress(to)' for only one address.InternetAddress[] address = {new InternetAddress(to)};msg.setRecipients(Message.RecipientType.TO, address);// Set the message subject and date we sent it.msg.setSubject("Email from JavaMail test");msg.setSentDate(new Date());// Set message contentmsg.setText("This is the text for this simple demo using JavaMail.");// Send the messageTransport.send(msg);
}
catch (MessagingException mex) {mex.printStackTrace();
}

或者,改為使用:

msg.setText("This is the text for this simple demo using JavaMail.");

您可以使用next設置消息內容:

msg.setContent("This is the text for this simple demo using JavaMail.", "text/plain");

檢查電子郵件地址

這是一個使用正則表達式檢查電子郵件格式是否正確的小技巧:

Pattern rfc2822 = Pattern.compile("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
if(rfc2822.matcher(EMAIL_ADDRESS).matches()) {// Well formed email
}

多部分消息

很好,但是通常您不會發送簡單的短信。 相反,您發送帶有粗體或斜體文本,圖像等的漂亮HTML正文消息。

注意:請參閱下面的“參考”部分,以了解有關MIME格式的信息,該格式擴展了您可以附加到電子郵件的數據的范圍,以允許多部分,附件等。

編寫多部分消息時,內容由不同部分組成,例如,一部分是作為簡單文本編寫的消息,另一部分是使用HTML以增強方式編寫的同一消息。 然后,讀取消息的客戶端負責根據其功能來渲染適當的部分。

...
// Here create two parts and set as message contect
// Create and fill first part
MimeBodyPart part1 = new MimeBodyPart();
part1.setText("This is part one of this multipart message.");// Create and fill second part
MimeBodyPart part2 = new MimeBodyPart();
part2.setText("This is part two of this multipart message.");// Create the Multipart.
Multipart mp = new MimeMultipart();
mp.addBodyPart(part1);
mp.addBodyPart(part2);// Set the message's content
msg.setContent(mp);
...

發送附件

太棒了,我們知道如何發送純文本電子郵件以及更令人難以置信的內容,例如包含HTML內容的多部分消息。 下一步是發送附加了太多文件的電子郵件。

創建帶有附件的電子郵件類似于創建多部分郵件,其中一部分可以是郵件的文本,另一部分可以是附件。 秘密在接下來的幾行中:

...
// Create a new part for the attached file
MimeBodyPart part3 = new MimeBodyPart();// Put a file in the second part
FileDataSource fds = new FileDataSource("THE_FILE_NAME");
part3.setDataHandler(new DataHandler(fds));
part3.setFileName(fds.getName());// 'mp' is the previously created 'MimeMultipart' object
mp.addBodyPart(part3);// 'msg' is the previously created 'Message' object
msg.setContent(mp);
...

HTML消息

創建帶有HTML內容的多部分消息非常簡單,只需在setContent方法中指定MIME類型即可:

...
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part</p>", "text/html");
...

在HTML代碼中附加圖像

如果您使用HTML編寫豐富的消息,則可以使用'img'標簽添加圖像。 如果從外部服務器引用了圖像,則沒有問題,但是:如何將圖像附加到消息并在HTML消息正文中進行呈現?

想法如下:

  • 首先,您需要附加圖片文件并設置一個標識符,然后
  • 其次,您需要編寫HTML代碼并在“ img”標簽中引用圖片標識符。
...
// Create and fill html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part with an attached image</p>" +"<img src='cid:some_image_id'>", "text/html");// Create a new part for the attached image and set the CID image identifier
MimeBodyPart imagePart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("THE_IMAGE_FILE_NAME");
imagePart.setDataHandler(new DataHandler(fds));
imagePart.setHeader("Content-ID", "some_image_id");mp.addBodyPart(htmlPart);
mp.addBodyPart(imagePart);
...

還有什么要說的嗎?

至此,您幾乎是發送電子郵件的高手。 您知道如何發送簡單的電子郵件,具有最豐富HTML內容的多部分電子郵件以及如何在郵件中附加文件和圖像。

程序員還能期望什么?

可能是更易于使用的API,這就是Apache Commons Email項目為您提供的。 請參閱“用戶指南”部分http://commons.apache.org/email/userguide.html以了解我的意思。 它提供了一個更抽象的API,它比協議更接近人類。

資源資源

  • JavaMail – JavaMail項目主頁。
  • Apache Commons Email – Apache Commons子項目,用于簡化JavaMail API的使用方式。 請參閱“ 用戶指南 ”部分。
  • MIME(多用途Internet郵件擴展名) –多部分電子郵件的MIME格式說明。

參考:在“ A Curious Animal”博客上從我們的JCG合作伙伴 Antonio Santiago 發送Java電子郵件 。

相關文章 :
  • Spring,Quartz和JavaMail集成教程
  • 使用Spring使用Java發送電子郵件– GMail SMTP服務器示例
  • Spring MVC3 Hibernate CRUD示例應用程序
  • Spring MVC開發–快速教程
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/10/sending-emails-with-java.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373902.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一張圖讓你看清Java集合類(Java集合類的總結)

如今關于Java集合類的文章非常多&#xff0c;可是我近期看到一個非常有意思圖片&#xff0c;基本上把Java集合的整體框架都給展現出來了。非常直觀。 假設發現圖片看不清楚。點此處看大圖 在這里&#xff0c;集合類分為了Map和Collection兩個大的類別。 處于圖片左上角的那一塊…

CSDN挑戰編程——《數學問題》

數學問題 題目詳情: 給你兩個長度為n的正整數序列分別為{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 設Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi為整數&#xff0c;0<xi<1。 請你求出S的最小值。 輸入…

【P1835】小紅花

很簡單的題&#xff0c;然而我沒想到&#xff0c;在NOIP上怎么辦嘛QAQ 話說這題不知道怎么分類啊……先扔到玄學里邊把…… 原題&#xff1a; Fj在圣誕節來臨之際&#xff0c;決定給他的奶牛發一些小紅花。現在Fj一共有N頭奶牛&#xff0c;這N頭牛按照編號1..N&#xff0c;排成…

python多維數組運用_使用Python將文件讀入多維數組

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混亂

每個應用程序都需要記錄日志。 現在&#xff0c;對于在Java中確切使用什么有很多選擇。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 還有更多的東西–時不時有人決定編寫自己的記錄器–…

Cocos2d-x 3.2 Lua演示樣例FontTest(字體測試)

Cocos2d-x 3.2 Lua演示樣例FontTest&#xff08;字體測試&#xff09;本篇博客介紹Cocos2d-x 3.2中Lua測試項目中的FontTest樣例&#xff0c;主要使用了字體文件來創建我們想要的字體樣式&#xff1a;第一個參數為文本。第二參數為ttf字體文件&#xff0c;第三個參數為字體大小…

CSDN挑戰編程——《絕對值最小》

絕對值最小 題目詳情: 給你一個數組A[n],請你計算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 則&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安裝memcached步驟

libevent: http://libevent.org/ 服務器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客戶端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二選一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux實現的System V interprocess communication (IPC)機制包含消息隊列&#xff08;message queues&#xff09;&#xff0c;信號集&#xff08;semaphore sets&#xff09;&#xff0c;和共享內存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我將解釋將Coherence與EclipseLink和GlassFish一起使用的策略第一。這描述了配置Coherence的JPA支持的Cache所必須采取的步驟&#xff0c;以及如何在GlassFish中使用它。高性能數據存儲。 一般的做法 您可以將Coherence API與通過JPA映…

arm板telnetd為什么運行不了_一種基于ARM的嵌入式系統開發的方案詳細講解

背景介紹在日益信息化的社會中&#xff0c;各種各樣的嵌入式系統已經全面滲透到日常生活的每一個角落。嵌入式系統的功能越來越復雜&#xff0c;這就使得一個嵌入式系統產品從市場需求立項到方案選擇、樣機研制、定型量產所需要的開發費用越來越多&#xff0c;所需開發時間越來…

反素數 -- 數學

反素數就是區間內約數個數最多的那個數。 在ACM題目里&#xff0c; 一般是求約數最多而且數字最小的那個數&#xff0c;【1--n】 二是求約數剛好等于n的最小的那個數 三是求區間里的最小反素數【beign&#xff0c;end】 1和3有區別嗎&#xff1f;有&#xff0c;1可以加速&#…

編程挑戰系統的輸入和輸出詳細說明

在高校俱樂部線上編程挑戰中&#xff0c;一道題目的所有測試數據是放在一個文本文件中&#xff0c;選手將一道題目的程序提交給評判系統運行&#xff0c;程序從該文件中讀取測試數據&#xff0c;再把運行結果輸出到另一個文本文件中。系統把輸出文件與標準答案比對&#xff0c;…

上傳文件---未能找到路徑“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上傳文件&#xff0c;簡單實例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式將Spring&Quartz與自定義注釋集成

在上一篇文章中 &#xff0c;我們演示了如何在Spring容器中創建和配置帶批注的Quartz作業。 我們使用了一個類級別的注釋將一些元數據添加到實現Quartz Job的bean中。 批注定義了作業的名稱&#xff0c;組及其cron表達式。 后來&#xff0c;大部分代碼專用于處理該批注&#xf…

python opencv旋轉_Python opencv實現與rotatedrect類似的矩形旋轉,pythonopencv,RotatedRect

本文原理&#xff1a;先旋轉矩形到指定角度&#xff0c;然后提取矩形外輪廓&#xff0c;從而獲取旋轉后的矩形坐標點。#&#xff01;/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

關于string轉整數

又是leetcode的easy級別題&#xff0c;很基本的題目&#xff0c;卻漏考慮很多情況&#xff0c;動手前一定要考慮清楚呀&#xff01;&#xff01;&#xff01; 就當做鍛煉寫作能力吧&#xff0c;先上題目&#xff01; 將文本轉換成整數&#xff0c;注意一下幾點&#xff1a; 1.文…

數字三角形——遞歸、遞推、記憶化搜索

數字三角形 描述: 有一個由非負整數組成的三角形&#xff0c;第一行只有一個數&#xff0c;除了最下行之外每個數的左下方和右下方各有一個數。 問題&#xff1a; 從第一行的數開始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

Java 7功能概述

前面我們討論了所有未納入Java 7的內容&#xff0c;然后回顧了將其納入Java 7的有用的Fork / Join框架 。 今天的帖子將帶我們了解Project Coin的每個功能-一系列小的語言增強功能&#xff0c;這些功能雖然不是開創性的&#xff0c;但是對于任何能夠使用JDK 7的開發人員來說都是…