📄 mailmanager.java.svn-base
字号:
package com.gsta.bimp.modules.mail;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
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;
import org.apache.log4j.Logger;
/**
* Title:MailManager.java<br>
* Description: 邮件发送管理模块<br>
* Date:2008-3-7<br>
*
* @author :dengwenguang<br>
* @version 1.0<br>
*/
public class MailManager {
/**
* @param mailContent
* @param flag
* @return 发送成功标志位
*/
// TODO :批量发送邮件
public int batchSend(MailSender mailSender, MailContent mailContent,
int flag) {
Logger logger = Logger.getLogger(this.getClass().getName());
String host = mailSender.getSmtpHost();
String from = mailSender.getFromAddress();
String[] receiverByTO = mailContent.getReceiverByTO();
receiverByTO = emailAddressFilter(receiverByTO);
String[] receiverByCC = mailContent.getReceiverByCC();
receiverByCC = emailAddressFilter(receiverByCC);
String[] receiverByBCC = mailContent.getReceiverByBCC();
receiverByBCC = emailAddressFilter(receiverByBCC);
String[] attachment = mailContent.getAttachment();
int count = 0;
Session session = null;
final String userName = mailSender.getUserName();
final String password = mailSender.getPassword();
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", String.valueOf(mailSender
.getIsAuthentication()));
if (mailSender.getIsAuthentication()) {
// Get Session
session = Session.getDefaultInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
} else {
session = Session.getDefaultInstance(props, null);
}
// Define message
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
if (receiverByTO != null) {
message.addRecipients(Message.RecipientType.TO,
string2Address(receiverByTO));
count = count + receiverByTO.length;
}
if (receiverByCC != null) {
message.addRecipients(Message.RecipientType.CC,
string2Address(receiverByCC));
count = count + receiverByCC.length;
}
if (receiverByBCC != null) {
message.addRecipients(Message.RecipientType.BCC,
string2Address(receiverByBCC));
count = count + receiverByBCC.length;
}
message.setSubject(MimeUtility.encodeText(mailContent.getSubject()));
MimeMultipart multipart = new MimeMultipart();
if (mailContent.getIsHtmlMail()) {
BodyPart msgBodyPart = new MimeBodyPart();
msgBodyPart.setContent(mailContent.getContent(), "text/html;charset=gb2312");
multipart.addBodyPart(msgBodyPart);
if (mailContent.getImageList() != null) {
for (int i = 0; i < mailContent.getImageList().size(); i++) {
BodyPart embedImage = new MimeBodyPart();
DataSource ds = new URLDataSource(new URL(mailContent
.getImageList().get(i).getImagePath()));
embedImage.setDataHandler(new DataHandler(ds));
embedImage.setHeader("Content-ID", "<"
+ mailContent.getImageList().get(i)
.getImageId() + ">");
multipart.addBodyPart(embedImage);
}
}
} else {
message.setText(mailContent.getContent());
}
if (attachment != null) {
for (int j = 0; j < attachment.length; j++) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment[j]);
attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(attachment[j].substring(
attachment[j].lastIndexOf("/") + 1, attachment[j]
.length()));
multipart.addBodyPart(attachmentBodyPart);
}
}
message.setContent(multipart);
message.setSentDate(new Date());
// send message
Transport.send(message);
} catch (AddressException e) {
// TODO Auto-generated catch block
logger.error("error happen in " + this.getClass().getName(), e);
e.printStackTrace();
return 0;
} catch (MessagingException e) {
// TODO Auto-generated catch block
logger.error("error happen in " + this.getClass().getName(), e);
e.printStackTrace();
return 0;
} catch (Exception e) {
logger.error("error happen in " + this.getClass().getName(), e);
e.printStackTrace();
return 0;
}
return count;
}
/**
*
* @description 字符串转换成Address对象
* @param strAddress
* @return
* @hisory created by dengwenguang on 2008-3-26
*/
private Address[] string2Address(String[] strAddress) {
if (strAddress == null) {
return null;
}
Address[] address = new InternetAddress[strAddress.length];
try {
for (int i = 0; i < strAddress.length; i++) {
address[i] = new InternetAddress(strAddress[i]);
}
} catch (AddressException e) {
e.printStackTrace();
return null;
}
return address;
}
/**
*
* @description 电子邮件地址校验
* @param emailAddress
* @return
* @hisory created by dengwenguang on 2008-3-26
*/
private boolean checkEmailAddress(String emailAddress) {
if (emailAddress != null) {
String regEx = "\\w+@(\\w+.)+[a-z]{2,3}";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(emailAddress);
return matcher.find();
} else {
return false;
}
}
/**
*
* @description 非法电子邮件地址过滤
* @param addresses
* @return
* @hisory created by dengwenguang on 2008-3-26
*/
private String[] emailAddressFilter(String[] addresses) {
if (addresses == null) {
return null;
}
List<String> list = new ArrayList();
for (int j = 0; j < addresses.length; j++) {
list.add(addresses[j]);
}
for (int i = 0; i < list.size(); i++) {
if (!checkEmailAddress(list.get(i))) {
list.remove(i);
}
}
addresses = (String[]) list.toArray(new String[list.size()]);
return addresses;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -