java-電子郵件傳送原始碼
阿新 • • 發佈:2021-01-19
純文字郵件:
import com.sun.mail.util.MailSSLSocketFactory;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class SendEmail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty ("mail.host", "smtp.qq.com"); 設定QQ郵件伺服器
prop.setProperty("mail.transport.protocol", "smtp"); // 郵件傳送協議
prop.setProperty("mail.smtp.auth", "true"); // 需要驗證使用者名稱密碼
// 關於QQ郵箱,還要設定SSL加密,加上以下程式碼即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//使用JavaMail傳送郵件的5個步驟
//建立定義整個應用程式所需的環境資訊的 Session 物件
Session session = Session. getDefaultInstance(prop, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//發件人郵件使用者名稱、授權碼
return new PasswordAuthentication("[email protected]", "授權碼");
}
});
//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
session.setDebug(true);
//2、通過session得到transport物件
Transport ts = session.getTransport();
//3、使用郵箱的使用者名稱和授權碼連上郵件伺服器
ts.connect("smtp.qq.com", "[email protected]", "授權碼");
//4、建立郵件
//建立郵件物件
MimeMessage message = new MimeMessage(session);
//指明郵件的發件人
message.setFrom(new InternetAddress("[email protected]"));
//指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
//郵件的標題
message.setSubject("只包含文字的簡單郵件");
//郵件的文字內容
message.setContent("你好啊!", "text/html;charset=UTF-8");
//5、傳送郵件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
}
高階郵件(帶圖片和附件)
先認識兩個類一個名詞:
MIME(多用途網際網路郵件擴充套件型別)
MimeBodyPart類
javax.mail.internet.MimeBodyPart類 表示的是一個MIME訊息,它和MimeMessage類一樣都是從Part介面繼承過來。
MimeMultipart類
javax.mail.internet.MimeMultipart是抽象類 Multipart的實現子類,它用來組合多個MIME訊息。一個MimeMultipart物件可以包含多個代表MIME訊息的MimeBodyPart物件。
建立包含內嵌圖片的郵件
- 前面的例子中是單獨的使用HTML或者是純文字內容,但是有時候我們需要在純文字中使用內嵌的方式顯示一些圖片,因此就要將純文字和內嵌圖片單獨存放在MimeBodyPart中然後再將其存放在一個Mimemultipart物件中即可。
程式碼如下:
import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class SendImageEmail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.host", "smtp.qq.com"); 設定QQ郵件伺服器
prop.setProperty("mail.transport.protocol", "smtp"); // 郵件傳送協議
prop.setProperty("mail.smtp.auth", "true"); // 需要驗證使用者名稱密碼
// 關於QQ郵箱,還要設定SSL加密,加上以下程式碼即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//使用JavaMail傳送郵件的5個步驟
//1、建立定義整個應用程式所需的環境資訊的 Session 物件
Session session = Session.getDefaultInstance(prop, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//發件人郵件使用者名稱、授權碼
return new PasswordAuthentication("[email protected]", "授權碼");
}
});
//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
session.setDebug(true);
//2、通過session得到transport物件
Transport ts = session.getTransport();
//3、使用郵箱的使用者名稱和授權碼連上郵件伺服器
ts.connect("smtp.qq.com", "[email protected]", "授權碼");
//4、建立郵件
//建立郵件
MimeMessage message = new MimeMessage(session);
// 設定郵件的基本資訊
//發件人
message.setFrom(new InternetAddress("[email protected]"));
//收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
//郵件標題
message.setSubject("帶圖片的郵件");
// 準備郵件資料
// 準備圖片資料
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
image.setDataHandler(dh);
image.setContentID("bz.jpg");
// 準備正文資料
MimeBodyPart text = new MimeBodyPart();
text.setContent("這是一封郵件正文帶圖片<img src='cid:bz.jpg'>的郵件", "text/html;charset=UTF-8");
// 描述資料關係
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related");
//設定到訊息中,儲存修改
message.setContent(mm);
message.saveChanges();
//5.傳送郵件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
}
帶圖片和附件的複雜郵件傳送
程式碼如下:
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;
public class SendFileMail {
public static void main(String[] args) throws MessagingException, GeneralSecurityException {
//建立一個配置檔案儲存並讀取資訊
Properties properties = new Properties();
//設定qq郵件伺服器
properties.setProperty("mail.host","smtp.qq.com");
//設定傳送的協議
properties.setProperty("mail.transport.protocol","smtp");
//設定使用者是否需要驗證
properties.setProperty("mail.smtp.auth", "true");
//=================================只有QQ存在的一個特性,需要建立一個安全的連結
// 關於QQ郵箱,還要設定SSL加密,加上以下程式碼即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//=================================準備工作完畢
//1.建立一個session會話物件;
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]", "授權碼");
}
});
//可以通過session開啟Dubug模式,檢視所有的過程
session.setDebug(true);
//2.獲取連線物件,通過session物件獲得Transport,需要捕獲或者丟擲異常;
Transport tp = session.getTransport();
//3.連線伺服器,需要丟擲異常;
tp.connect("smtp.qq.com","[email protected]","授權碼");
//4.連線上之後我們需要傳送郵件;
MimeMessage mimeMessage = imageMail(session);
//5.傳送郵件
tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//6.關閉連線
tp.close();
}
public static MimeMessage imageMail(Session session) throws MessagingException {
//訊息的固定資訊
MimeMessage mimeMessage = new MimeMessage(session);
//郵件傳送人
mimeMessage.setFrom(new InternetAddress("[email protected]"));
//郵件接收人,可以同時傳送給很多人,我們這裡只發給自己;
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
mimeMessage.setSubject("我也不知道是個什麼東西就發給你了"); //郵件主題
/*
編寫郵件內容
1.圖片
2.附件
3.文字
*/
//圖片
MimeBodyPart body1 = new MimeBodyPart();
body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png")));
body1.setContentID("yhbxb.png"); //圖片設定ID
//文字
MimeBodyPart body2 = new MimeBodyPart();
body2.setContent("請注意,我不是廣告<img src='cid:yhbxb.png'>","text/html;charset=utf-8");
//附件
MimeBodyPart body3 = new MimeBodyPart();
body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
body3.setFileName("log4j.properties"); //附件設定名字
MimeBodyPart body4 = new MimeBodyPart();
body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));
body4.setFileName(""); //附件設定名字
//拼裝郵件正文內容
MimeMultipart multipart1 = new MimeMultipart();
multipart1.addBodyPart(body1);
multipart1.addBodyPart(body2);
multipart1.setSubType("related"); //1.文字和圖片內嵌成功!
//new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內容設定為主體
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(multipart1);
//拼接附件
MimeMultipart allFile =new MimeMultipart();
allFile.addBodyPart(body3); //附件
allFile.addBodyPart(body4); //附件
allFile.addBodyPart(contentText);//正文
allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有型別設定為mixed;
//放到Message訊息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges();//儲存修改
return mimeMessage;
}
}