利用java代碼發(fā)送郵件,結(jié)合網(wǎng)上搜來的資料,我適當(dāng)進(jìn)行了改造,改為利用java代碼群發(fā)郵件.現(xiàn)將代碼復(fù)制整理如下:
注意事項:
純java開發(fā)的話,JDK1.6以外,需要導(dǎo)入這里自己打包的mail.jar.另外前三個類必須放同一包中。當(dāng)然如果是javaEE,你完全不用擔(dān)心了,直接建類復(fù)制,或者下載用都行)。
第一個類 : 郵件發(fā)送類
package com.crt.settlement.service.test;
import java.util.Properties;
/**
* 郵件發(fā)送類
*
*/
public class MailSenderInfo {
// 發(fā)送郵件的服務(wù)器的IP(或主機(jī)地址)
private String mailServerHost;
// 發(fā)送郵件的服務(wù)器的端口
private String mailServerPort;
// 發(fā)件人郵箱地址
private String fromAddress;
// 收件人郵箱地址
private String toAddress;
// 登陸郵件發(fā)送服務(wù)器的用戶名
private String userName;
// 登陸郵件發(fā)送服務(wù)器的密碼
private String password;
// 是否需要身份驗證
private boolean validate = false;
// 郵件主題
private String subject;
// 郵件的文本內(nèi)容
private String content;
// 郵件附件的文件名
private String[] attachFileNames;
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
//設(shè)置是否安全驗證,默認(rèn)為false,一般情況都設(shè)置為true
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String textContent) {
this.content = textContent;
}
}
第二個類 : 發(fā)送郵件類
package com.crt.settlement.service.test;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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;
/**
* 發(fā)送郵件的類
*
*
*/
public class SimpleMailSender {
public boolean sendTextMail(MailSenderInfo mailInfo) {
// 判斷是否需要身份認(rèn)證
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份認(rèn)證,則創(chuàng)建一個密碼驗證器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會話屬性和密碼驗證器構(gòu)造一個發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根據(jù)session創(chuàng)建一個郵件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 創(chuàng)建郵件發(fā)送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設(shè)置郵件消息的發(fā)送者
mailMessage.setFrom(from);
// 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
// 發(fā)送給多人
String toList = getMailList(mailInfo.getToAddress().split(","));
InternetAddress[] iaToList = new InternetAddress().parse(toList);
// Message.RecipientType.TO屬性表示接收者的類型為TO
mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
// 設(shè)置郵件消息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設(shè)置郵件消息發(fā)送的時間
mailMessage.setSentDate(new Date());
// 設(shè)置郵件消息的主要內(nèi)容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
mailMessage.saveChanges();
// 發(fā)送郵件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
// 判斷是否需要身份認(rèn)證
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份認(rèn)證,則創(chuàng)建一個密碼驗證器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會話屬性和密碼驗證器構(gòu)造一個發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根據(jù)session創(chuàng)建一個郵件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 創(chuàng)建郵件發(fā)送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設(shè)置郵件消息的發(fā)送者
mailMessage.setFrom(from);
// 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
// 發(fā)送給多人
String toList = getMailList(mailInfo.getToAddress().split(","));
InternetAddress[] iaToList = new InternetAddress().parse(toList);
// Message.RecipientType.TO屬性表示接收者的類型為TO
mailMessage.setRecipients(Message.RecipientType.TO, iaToList);
// 設(shè)置郵件消息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設(shè)置郵件消息發(fā)送的時間
mailMessage.setSentDate(new Date());
// MiniMultipart類是一個容器類,包含MimeBodyPart類型的對象
Multipart mainPart = new MimeMultipart();
// 創(chuàng)建一個包含HTML內(nèi)容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 設(shè)置HTML內(nèi)容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 將MiniMultipart對象設(shè)置為郵件內(nèi)容
mailMessage.setContent(mainPart);
mailMessage.saveChanges();
// 發(fā)送郵件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
private static String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer();
int length = mailArray.length;
if (mailArray != null && length < 2) {
toList.append(mailArray[0]);
} else {
for (int i = 0; i < length; i++) {
toList.append(mailArray[i]);
if (i != (length - 1)) {
toList.append(",");
}
}
}
return toList.toString();
}
}
第三個類 : 郵件認(rèn)證器
package com.crt.settlement.service.test;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 郵件用戶名和密碼認(rèn)證器
*
*/
public class MyAuthenticator extends Authenticator{
String userName = null;
String password = null;
public MyAuthenticator() {
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
第四個類 : 測試類:
需要注意,當(dāng)中需要自己修改的地方都已經(jīng)做了配置,值的一提的事:
服務(wù)器的ip和port是在網(wǎng)上可以輕松查到的,您需要用什么郵箱發(fā),就設(shè)置成對應(yīng)郵箱的服務(wù)器。
發(fā)郵件別用剛申請的郵箱,一般剛申請的郵箱是不會給你這個權(quán)限的,要不就是需要綁定,要不就是有一定期限。建議測試時用自己已經(jīng)用過很久的qq郵箱或者163等其他郵箱。
-
對于使用qq郵箱發(fā)送,需要在QQ郵箱中進(jìn)行如下設(shè)置上的更改:在登錄QQ郵箱后臺在"設(shè)置"=》賬號中開啟POP3/SMTP服務(wù) ,如下圖所示:QQ 郵箱通過生成授權(quán)碼來設(shè)置密碼:
package com.crt.settlement.service.test;
/**
* 設(shè)置數(shù)據(jù),開始發(fā)送
*
*/
public class SendMailDemo {
public static void main(String[] args) {
// 設(shè)置郵件服務(wù)器信息
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.qq.com");// 發(fā)送郵件的服務(wù)器的IP(或主機(jī)地址)
mailInfo.setMailServerPort("587");
// mailInfo.setMailServerHost("smtp.163.com");// 發(fā)送郵件的163服務(wù)器的IP(或主機(jī)地址)
// mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
// 郵箱用戶名(根據(jù)自己情況設(shè)置)
mailInfo.setUserName("91***01183@qq.com");
// 郵箱密碼(根據(jù)自己情況設(shè)置)(注意此處密碼為授權(quán)碼)
mailInfo.setPassword("rueqjpdgcvrgbbje");
// 發(fā)件人郵箱(根據(jù)自己情況設(shè)置,如果你沒對郵箱進(jìn)行特別設(shè)置,應(yīng)該和郵箱用戶名一致)
mailInfo.setFromAddress("91***01183@qq.com");
// 收件人郵箱(根據(jù)自己情況設(shè)置)
//設(shè)置為發(fā)送給多人
mailInfo.setToAddress("xidahuanghui@163.com,7633434534@qq.com");
// 郵件標(biāo)題
mailInfo.setSubject("測試Java發(fā)送郵件");
// 郵件內(nèi)容
StringBuffer buffer = new StringBuffer();
buffer.append("地址:");
buffer.append("測試測試測試");
mailInfo.setContent(buffer.toString());
// 發(fā)送郵件
SimpleMailSender sms = new SimpleMailSender();
// 發(fā)送文體格式
sms.sendTextMail(mailInfo);
// 發(fā)送html格式
SimpleMailSender.sendHtmlMail(mailInfo);
System.out.println("郵件發(fā)送完畢");
}
}
參考文檔:
- java發(fā)送郵件 http://www.cnblogs.com/AK-BB/p/java_sender_email.html
- javamail向多人發(fā)送郵件例子代碼 http://itspace.iteye.com/blog/558992
- java發(fā)送郵件 http://www.runoob.com/java/java-sending-email.html

