利用java代碼發(fā)送郵件,結(jié)合網(wǎng)上搜來的資料,我適當(dāng)進(jìn)行了改造,改為利用java代碼群發(fā)郵件.現(xiàn)將代碼復(fù)制整理如下:
注意事項(xiàng):
純java開發(fā)的話,JDK1.6以外庸推,需要導(dǎo)入這里自己打包的mail.jar.另外前三個(gè)類必須放同一包中。當(dāng)然如果是javaEE枕赵,你完全不用擔(dān)心了,直接建類復(fù)制,或者下載用都行)吧秕。
第一個(gè)類 : 郵件發(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;
// 是否需要身份驗(yàn)證
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è)置是否安全驗(yàn)證,默認(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;
}
}
第二個(gè)類 : 發(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)建一個(gè)密碼驗(yàn)證器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根據(jù)session創(chuàng)建一個(gè)郵件消息
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ā)送的時(shí)間
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)建一個(gè)密碼驗(yàn)證器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根據(jù)session創(chuàng)建一個(gè)郵件消息
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ā)送的時(shí)間
mailMessage.setSentDate(new Date());
// MiniMultipart類是一個(gè)容器類斯入,包含MimeBodyPart類型的對(duì)象
Multipart mainPart = new MimeMultipart();
// 創(chuàng)建一個(gè)包含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對(duì)象設(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();
}
}
第三個(gè)類 : 郵件認(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);
}
}
第四個(gè)類 : 測(cè)試類:
需要注意砂碉,當(dāng)中需要自己修改的地方都已經(jīng)做了配置,值的一提的事:
服務(wù)器的ip和port是在網(wǎng)上可以輕松查到的刻两,您需要用什么郵箱發(fā)增蹭,就設(shè)置成對(duì)應(yīng)郵箱的服務(wù)器。
發(fā)郵件別用剛申請(qǐng)的郵箱磅摹,一般剛申請(qǐng)的郵箱是不會(huì)給你這個(gè)權(quán)限的滋迈,要不就是需要綁定,要不就是有一定期限户誓。建議測(cè)試時(shí)用自己已經(jīng)用過很久的qq郵箱或者163等其他郵箱饼灿。
-
對(duì)于使用qq郵箱發(fā)送,需要在QQ郵箱中進(jìn)行如下設(shè)置上的更改:在登錄QQ郵箱后臺(tái)在"設(shè)置"=》賬號(hào)中開啟POP3/SMTP服務(wù) ,如下圖所示:
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è)置,如果你沒對(duì)郵箱進(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("測(cè)試Java發(fā)送郵件");
// 郵件內(nèi)容
StringBuffer buffer = new StringBuffer();
buffer.append("地址:");
buffer.append("測(cè)試測(cè)試測(cè)試");
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