JavaMail使用SMTP協議傳送電子郵件(詳解)
package cn.outofmemory.javamail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
* 使用SMTP協議傳送電子郵件
*/
public class SendMailTest {
// 郵件傳送協議
private final static String PROTOCOL = "smtp";
// SMTP郵件伺服器
private final static String HOST = "smtp.sina.com";
// SMTP郵件伺服器預設埠
private final static String PORT = "25";
// 是否要求身份認證
private final static String IS_AUTH = "true";
// 是否啟用除錯模式(啟用除錯模式可列印客戶端與伺服器互動過程時一問一答的響應訊息)
private final static String IS_ENABLED_DEBUG_MOD = "true";
// 發件人
private static String from = " [email protected]";
// 收件人
private static String to = "[email protected]";
// 初始化連線郵件伺服器的會話資訊
private static Properties props = null;
static {
props = new Properties();
props.setProperty("mail.transport.protocol", PROTOCOL);
props.setProperty("mail.smtp.host", HOST);
props.setProperty("mail.smtp.port", PORT);
props.setProperty("mail.smtp.auth", IS_AUTH);
props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
}
public static void main(String[] args) throws Exception {
// 傳送文字郵件
sendTextEmail();
// 傳送簡單的html郵件
sendHtmlEmail();
// 傳送帶內嵌圖片的HTML郵件
sendHtmlWithInnerImageEmail();
// 傳送混合組合郵件
sendMultipleEmail();
// 傳送已經生成的eml郵件
//sendMailForEml();
}
/**
* 傳送簡單的文字郵件
*/
public static void sendTextEmail() throws Exception {
// 建立Session例項物件
Session session = Session.getDefaultInstance(props);
// 建立MimeMessage例項物件
MimeMessage message = new MimeMessage(session);
// 設定發件人
message.setFrom(new InternetAddress(from));
// 設定郵件主題
message.setSubject("使用javamail傳送簡單文字郵件");
// 設定收件人
message.setRecipient(RecipientType.TO, new InternetAddress(to));
// 設定傳送時間
message.setSentDate(new Date());
// 設定純文字內容為郵件正文
message.setText("使用POP3協議傳送文字郵件測試!!!");
// 儲存並生成最終的郵件內容
message.saveChanges();
// 獲得Transport例項物件
Transport transport = session.getTransport();
// 開啟連線
transport.connect("xyang0917", "123456abc");
// 將message物件傳遞給transport物件,將郵件傳送出去
transport.sendMessage(message, message.getAllRecipients());
// 關閉連線
transport.close();
}
/**
* 傳送簡單的html郵件
*/
public static void sendHtmlEmail() throws Exception {
// 建立Session例項物件
Session session = Session.getInstance(props, new MyAuthenticator());
// 建立MimeMessage例項物件
MimeMessage message = new MimeMessage(session);
// 設定郵件主題
message.setSubject("html郵件主題");
// 設定傳送人
message.setFrom(new InternetAddress(from));
// 設定傳送時間
message.setSentDate(new Date());
// 設定收件人
message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
// 設定html內容為郵件正文,指定MIME型別為text/html型別,並指定字元編碼為gbk
message.setContent("<span style='color:red;'>html郵件測試...</span>","text/html;charset=gbk");
// 儲存並生成最終的郵件內容
message.saveChanges();
// 傳送郵件
Transport.send(message);
}
/**
* 傳送帶內嵌圖片的HTML郵件
*/
public static void sendHtmlWithInnerImageEmail() throws MessagingException {
// 建立Session例項物件
Session session = Session.getDefaultInstance(props, new MyAuthenticator());
// 建立郵件內容
MimeMessage message = new MimeMessage(session);
// 郵件主題,並指定編碼格式
message.setSubject("帶內嵌圖片的HTML郵件", "utf-8");
// 發件人
message.setFrom(new InternetAddress(from));
// 收件人
message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
// 抄送
message.setRecipient(RecipientType.CC, new InternetAddress(" [email protected]"));
// 密送 (不會在郵件收件人名單中顯示出來)
message.setRecipient(RecipientType.BCC, new InternetAddress("[email protected]"));
// 傳送時間
message.setSentDate(new Date());
// 建立一個MIME子型別為“related”的MimeMultipart物件
MimeMultipart mp = new MimeMultipart("related");
// 建立一個表示正文的MimeBodyPart物件,並將它加入到前面建立的MimeMultipart物件中
MimeBodyPart htmlPart = new MimeBodyPart();
mp.addBodyPart(htmlPart);
// 建立一個表示圖片資源的MimeBodyPart物件,將將它加入到前面建立的MimeMultipart物件中
MimeBodyPart imagePart = new MimeBodyPart();
mp.addBodyPart(imagePart);
// 將MimeMultipart物件設定為整個郵件的內容
message.setContent(mp);
// 設定內嵌圖片郵件體
DataSource ds = new FileDataSource(new File("resource/firefoxlogo.png"));
DataHandler dh = new DataHandler(ds);
imagePart.setDataHandler(dh);
imagePart.setContentID("firefoxlogo.png"); // 設定內容編號,用於其它郵件體引用
// 建立一個MIME子型別為"alternative"的MimeMultipart物件,並作為前面建立的htmlPart物件的郵件內容
MimeMultipart htmlMultipart = new MimeMultipart("alternative");
// 建立一個表示html正文的MimeBodyPart物件
MimeBodyPart htmlBodypart = new MimeBodyPart();
// 其中cid=androidlogo.gif是引用郵件內部的圖片,即imagePart.setContentID("androidlogo.gif");方法所儲存的圖片
htmlBodypart.setContent("<span style='color:red;'>這是帶內嵌圖片的HTML郵件哦!!!<img src=\"cid:firefoxlogo.png\" /></span>","text/html;charset=utf-8");
htmlMultipart.addBodyPart(htmlBodypart);
htmlPart.setContent(htmlMultipart);
// 儲存並生成最終的郵件內容
message.saveChanges();
// 傳送郵件
Transport.send(message);
}
/**
* 傳送帶內嵌圖片、附件、多收件人(顯示郵箱姓名)、郵件優先順序、閱讀回執的完整的HTML郵件
*/
public static void sendMultipleEmail() throws Exception {
String charset = "utf-8"; // 指定中文編碼格式
// 建立Session例項物件
Session session = Session.getInstance(props,new MyAuthenticator());
// 建立MimeMessage例項物件
MimeMessage message = new MimeMessage(session);
// 設定主題
message.setSubject("使用JavaMail傳送混合組合型別的郵件測試");
// 設定傳送人
message.setFrom(new InternetAddress(from,"新浪測試郵箱",charset));
// 設定收件人
message.setRecipients(RecipientType.TO,
new Address[] {
// 引數1:郵箱地址,引數2:姓名(在客戶端收件只顯示姓名,而不顯示郵件地址),引數3:姓名中文字串編碼
new InternetAddress(" [email protected]", "張三_sohu", charset),
new InternetAddress("[email protected]", "李四_163", charset),
}
);
// 設定抄送
message.setRecipient(RecipientType.CC, new InternetAddress("[email protected]","王五_gmail",charset));
// 設定密送
message.setRecipient(RecipientType.BCC, new InternetAddress("[email protected]", "趙六_QQ", charset));
// 設定傳送時間
message.setSentDate(new Date());
// 設定回覆人(收件人回覆此郵件時,預設收件人)
message.setReplyTo(InternetAddress.parse("\"" + MimeUtility.encodeText("田七") + "\" <[email protected]>"));
// 設定優先順序(1:緊急 3:普通 5:低)
message.setHeader("X-Priority", "1");
// 要求閱讀回執(收件人閱讀郵件時會提示回覆發件人,表明郵件已收到,並已閱讀)
message.setHeader("Disposition-Notification-To", from);
// 建立一個MIME子型別為"mixed"的MimeMultipart物件,表示這是一封混合組合型別的郵件
MimeMultipart mailContent = new MimeMultipart("mixed");
message.setContent(mailContent);
// 附件
MimeBodyPart attach1 = new MimeBodyPart();
MimeBodyPart attach2 = new MimeBodyPart();
// 內容
MimeBodyPart mailBody = new MimeBodyPart();
// 將附件和內容新增到郵件當中
mailContent.addBodyPart(attach1);
mailContent.addBodyPart(attach2);
mailContent.addBodyPart(mailBody);
// 附件1(利用jaf框架讀取資料來源生成郵件體)
DataSource ds1 = new FileDataSource("resource/Earth.bmp");
DataHandler dh1 = new DataHandler(ds1);
attach1.setFileName(MimeUtility.encodeText("Earth.bmp"));
attach1.setDataHandler(dh1);
// 附件2
DataSource ds2 = new FileDataSource("resource/如何學好C語言.txt");
DataHandler dh2 = new DataHandler(ds2);
attach2.setDataHandler(dh2);
attach2.setFileName(MimeUtility.encodeText("如何學好C語言.txt"));
// 郵件正文(內嵌圖片+html文字)
MimeMultipart body = new MimeMultipart("related"); //郵件正文也是一個組合體,需要指明組合關係
mailBody.setContent(body);
// 郵件正文由html和圖片構成
MimeBodyPart imgPart = new MimeBodyPart();
MimeBodyPart htmlPart = new MimeBodyPart();
body.addBodyPart(imgPart);
body.addBodyPart(htmlPart);
// 正文圖片
DataSource ds3 = new FileDataSource("resource/firefoxlogo.png");
DataHandler dh3 = new DataHandler(ds3);
imgPart.setDataHandler(dh3);
imgPart.setContentID("firefoxlogo.png");
// html郵件內容
MimeMultipart htmlMultipart = new MimeMultipart("alternative");
htmlPart.setContent(htmlMultipart);
MimeBodyPart htmlContent = new MimeBodyPart();
htmlContent.setContent(
"<span style='color:red'>這是我自己用java mail傳送的郵件哦!" +
"<img src='cid:firefoxlogo.png' /></span>"
, "text/html;charset=gbk");
htmlMultipart.addBodyPart(htmlContent);
// 儲存郵件內容修改
message.saveChanges();
/*File eml = buildEmlFile(message);
sendMailForEml(eml);*/
// 傳送郵件
Transport.send(message);
}
/**
* 將郵件內容生成eml檔案
* @param message 郵件內容
*/
public static File buildEmlFile(Message message) throws MessagingException, FileNotFoundException, IOException {
File file = new File("c:\\" + MimeUtility.decodeText(message.getSubject())+".eml");
message.writeTo(new FileOutputStream(file));
return file;
}
/**
* 傳送本地已經生成好的email檔案
*/
public static void sendMailForEml(File eml) throws Exception {
// 獲得郵件會話
Session session = Session.getInstance(props,new MyAuthenticator());
// 獲得郵件內容,即發生前生成的eml檔案
InputStream is = new FileInputStream(eml);
MimeMessage message = new MimeMessage(session,is);
//傳送郵件
Transport.send(message);
}
/**
* 向郵件伺服器提交認證資訊
*/
static class MyAuthenticator extends Authenticator {
private String username = "xyang0917";
private String password = "123456abc";
public MyAuthenticator() {
super();
}
public MyAuthenticator(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
}
相關推薦
JavaMail使用SMTP協議傳送電子郵件(詳解)
package cn.outofmemory.javamail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import j
SSL協議握手工作流程詳解(雙向HTTPS流程)
包含 style strong 雙向認證 包括 返回 情況 身份認證 ssl 參考學習文檔:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL協議的工作流程: 服務器認證階段: 1)客戶端向服務
HSRP-熱備份路由協議(配置思路詳解版)
hsrp-熱備份路由協議(配置思路詳解版)HSRP-熱備份路由協議配置思路:一.IP地址規劃 PC1,IP-192.168.10.1/24 default gatway(網關地址)-192.168.10.250 PC2, IP-192.168.20.1/24 default gatway(網關地址)-19
瀏覽器 HTTP 協議緩存機制詳解
blank 設置 響應頭 tag ble 1.0 強制 pri follow 1、緩存的分類 2、瀏覽器緩存機制詳解 2.1 HTML Meta標簽控制緩存 2.2 HTTP頭信息控制緩存 2.2.1 瀏覽器請求流程 2.2.2 幾個重要概念解釋 3、用戶行為與緩存 4
Android實現快速傳送電子郵件
最近有朋友有需求是通過apk傳送郵件,我心想這怎麼可以實現?然後就研究了一番,最後得出結論是可行的! 確實可以自己的手機上定義主題和內容或者附件,然後傳送給對應的郵箱!詳細步驟傾聽我一一道來 我們以A郵箱傳送郵件給B郵箱為例: 1 開啟A郵箱的POP3服務 每個郵箱都有POP3服
HTTP協議狀態碼大全詳解
HTTP狀態碼大全 完整的 HTTP 1.1規範說明書來自於RFC 2616,你可以在 http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D線上查閱。HTTP 1.1的狀態碼被標記為新特
呼叫Mailgun API傳送電子郵件一例
Mailgun提供了免費的郵件傳送服務,適合拿來做通知提醒一類的服務。免費版預設支援每天傳送多達300封郵件,最多可以發10,000封。 註冊方法:訪問 https://www.mailgun.com/email-api , 點Sign Up Free 輸入基本資訊,包括要接收郵
以太坊2.0協議核心Beacon鏈詳解
以太坊2.0並不是一個新主意,早在2014年,Vitalik就提到了以太坊2.0的概念,他說: “我們要麼解決可擴充套件性和共識問題,要麼就死於嘗試,” 好吧,我們還活得不錯,而他幾周前釋出的最新觀點是: “對於以太坊2.0來說,理論上已沒有明顯未解決的問題。” 現在正是實現這
TCP傳送資料流程詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
net類庫中傳送電子郵件的方法總結
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
PHP 傳送電子郵件
PHP 傳送電子郵件 PHP 允許您從指令碼直接傳送電子郵件。 。。。。。。。。。。。。。 PHP mail() 函式 PHP mail() 函式用於從指令碼中傳送電子郵件。 語法:mail(to,subject,message,headers,parameters) to 必需。規定 email
tp5傳送電子郵件
一、開啟郵箱的SMTP服務 QQ郵箱設定方式: 點選設定: 點選賬戶 在最下面,有個開啟 點開啟會彈出個窗,上面有密碼,記下密碼 163郵箱設定方式: 其他郵箱都一樣,獲取授權碼就行 二、下載類庫檔案 https://gi
使用Java傳送電子郵件
所需jar包 <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId
.NET 傳送電子郵件
static void Main(string[] args) { ///先引入 using System.Net.Mail; ///傳送郵件 using (MailMessage mailMessage = ne
使用SMTP傳送電子郵件
描述SMTP的基本操作,有如下常見的情景。假如Alice想給Bob傳送一封簡單的ASCII報文: 1)Alice啟動她的郵件代理伺服器並提供Bob的郵件地址(例如:***@163.com),撰寫郵件,通過使用者代理髮送該郵件。 2)Alice的使用者代理把報文傳送給Ali
vb.net 傳送電子郵件方法 無需改動 直接Ctrl C V
Public Function Emilsend(ByVal arrp As Array) As Boolean Dim tConsultname As String = G_objService.SB_MyTrim(arrp(0)) Di
使用Python傳送電子郵件
SMTP傳送郵件: 我這裡使用的qq郵箱伺服器,所以執行之前應先把qq郵箱中的相應服務開啟; 1.傳送文字郵件 #傳送文字郵件 import smtplib from email.mime.text import MIMEText from email.header
Servlet 傳送電子郵件
Servlet 傳送電子郵件 使用 Servlet 傳送一封電子郵件是很簡單的,但首先您必須在您的計算機上安裝 JavaMail API 和 Java Activation Framework)JAF)。 您可以從 Java 標準網站下載最新版本
PHP傳送電子郵件
今天學習了PHP的mail函式,並且利用它傳送傳送一些簡單點的郵件,下面 開始吧: 1、首先,應該配置自己的PHP檔案(也就是php.ini檔案)然後需要安裝sendmail 2、下載後將其解壓到任意一個目錄下面,我的是和php相關檔案放在一起了(自己建立一個資料夾sen
用flask開發個人部落格(24)—— flask中使用Flask_Mail傳送電子郵件
flask中使用Flask-Mail提供對電子郵件的支援,下面將分步驟測試flask中傳送電子郵件的功能: 1 配置SMTP伺服器的資訊 我們需要藉助flask程式例項app的config屬性來配置電子郵件的SMTP伺服器資訊,其中主要的配置