Liferay中的邮件送信非常简单,调用 MailServiceUtil.sendEmail(mailMessage);即可。
是单独的一个job,所以是非同期送信。
下面是我写的一个送信方法。to,cc,bcc都可以是用逗号分隔的多个邮件地址。
private void sendMail(String toAddress, String ccAddress, String bccAddress, String mailTempFileName, Map<String, String> replaceMap) throws AddressException, IOException {
InternetAddress[] toAddressArr = null;
if (toAddress != null) {
String[] mailAddressArr = toAddress.split(",");
toAddressArr = new InternetAddress[mailAddressArr.length];
for (int i = 0; i < mailAddressArr.length; i++) {
toAddressArr[i] = new InternetAddress(mailAddressArr[i]);
}
}
InternetAddress[] ccAddressArr = null;
if (ccAddress != null) {
String[] mailAddressArr = ccAddress.split(",");
ccAddressArr = new InternetAddress[mailAddressArr.length];
for (int i = 0; i < mailAddressArr.length; i++) {
ccAddressArr[i] = new InternetAddress(mailAddressArr[i]);
}
}
InternetAddress[] bccAddressArr = null;
if (bccAddress != null) {
String[] mailAddressArr = bccAddress.split(",");
bccAddressArr = new InternetAddress[mailAddressArr.length];
for (int i = 0; i < mailAddressArr.length; i++) {
bccAddressArr[i] = new InternetAddress(mailAddressArr[i]);
}
}
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(mailTempFileName)));
// template,读入模板。模板的第一行作为标题,第二行以后是本文。
StringBuffer sb = new StringBuffer();
String str = null;
String subject = "";
String body = "";
boolean isFirst = true;
while((str = br.readLine())!= null) {
if (isFirst) {
subject = str;
isFirst = false;
continue;
}
sb.append(str + "\r\n");
}
br.close();
body = sb.toString();
//
subject = replaceAllParameter(subject, replaceMap);
body = replaceAllParameter(body, replaceMap);
// FROM
InternetAddress fromAddress = new InternetAddress(PropsUtil.get("bbs.mail.fromaddress"));
MailMessage mailMessage = new MailMessage(fromAddress, subject, body, false);
if (toAddressArr != null) {
mailMessage.setTo(toAddressArr);
}
if (ccAddress != null) {
mailMessage.setCC(ccAddressArr);
}
if (bccAddress != null) {
mailMessage.setBCC(bccAddressArr);
}
// 送信
MailServiceUtil.sendEmail(mailMessage);
}
//置换文字替换方法
private String replaceAllParameter(String replace, Map<String, String> replaceMap) {
Iterator<String> iterator = replaceMap.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
if (replaceMap.get(key) != null) {
//replace = replace.replaceAll("\\" + key, replaceMap.get(key));
replace = StringUtils.replace(replace, key, replaceMap.get(key));
}
}
return replace;
}