使用JavaMail群發郵件
阿新 • • 發佈:2018-12-09
很多時候我們有群發郵件的需求,雖然大多數郵箱都支援群發功能,但是還是有點繁雜,JavaMail提供的API功能強大,可能很方便的解決我們的問題
下面我們就開始來寫我們的程式碼吧
首先需要準備好下面兩個jar包
用於獲得收件人的方法:
public String[] getRecipients() {
File recipientsFile = new File("E:Recipients.txt");
InputStream in = null;
BufferedReader br = null;
try {
in = new FileInputStream(recipientsFile);
br = new BufferedReader(new InputStreamReader(in));
String line = null;
StringBuilder builder = new StringBuilder();
// 讀入聯絡人
while ((line = br.readLine()) != null) {
builder.append(line);
builder.append("," );
}
// 將聯絡人分割為陣列返回
return builder.toString().split(",");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (in != null)
in .close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
用於傳送郵件的方法:
public void sendGroupMail() throws AddressException, MessagingException {
// 得到Session
Properties props = new Properties();
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//郵箱的使用者名稱和密碼
return new PasswordAuthentication("gyx2110", "********");
}
};
Session session = Session.getInstance(props, authenticator);
//傳送郵件
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
String[] recipients = getRecipients();
for (String rec : recipients) {
//設定收件人
message.setRecipient(RecipientType.TO, new InternetAddress(rec));
//設定標題
message.setSubject("JavaMail測試郵件!");
//設定正文
message.setContent("群發郵件,如有打擾請見諒!", "text/html;charset=utf-8");
//傳送
Transport.send(message);
}
}
值得一提的是我們群發的時候為了隱私,這裡使用的傳送方式是逐條傳送,而不是批量傳送,這樣在正文頁面就看不到有哪些人收到這封郵件了。
到這裡我們只是傳送了普通文體資訊,大多數時我們的郵件是帶有附件的,下面的我們來為郵件中新增附件。
新增附件的方法:
public void setMultipart(MimeMessage msg) throws MessagingException,
IOException {
// 一個Multipart物件包含一個或多個BodyPart物件,來組成郵件的正文部分(包括附件)。
MimeMultipart multiPart = new MimeMultipart();
// 新增正文
MimeBodyPart partText = new MimeBodyPart();
partText.setContent("這是一封含有附件的群發郵件!", "text/html;charset=utf-8");
// 新增檔案 也就 是附件
MimeBodyPart partFile = new MimeBodyPart();
File file = new File("E:mail.jar");
partFile.attachFile(file);
// 設定在收件箱中和附件名 並進行編碼以防止中文亂碼
partFile.setFileName(MimeUtility.encodeText(file.getName()));
multiPart.addBodyPart(partText);
multiPart.addBodyPart(partFile);
msg.setContent(multiPart);
}
傳送帶附件的郵件:
public void sendMultipartMail() throws AddressException, MessagingException,
IOException {
// 得到Session
Properties props = new Properties();
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 郵箱的使用者名稱和密碼
return new PasswordAuthentication("gyx2110", "********");
}
};
Session session = Session.getInstance(props, authenticator);
// 傳送郵件
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
// 設定收件人
message.setRecipient(RecipientType.TO, new InternetAddress(
"[email protected]"));
// 設定標題
message.setSubject("JavaMail帶附件的測試郵件!");
// 設定郵件主體
setMultipart(message);
// 傳送
Transport.send(message);
}