package com.jrails.commons.utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.security.Security;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
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.MimeMessage;
/**
* 使用Gmail发送邮件
*
* @author Winter Lau
*/
public class GmailUtils {
private static Log logger = LogFactory.getFactory().getInstance(GmailUtils.class);
/**
* 设置邮件发送属性
*
* @param username 邮箱名,省略@后面的邮箱域名
* @param password 邮箱密码
*/
private Session setProperties(final String username, final String password) {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
return session;
}
/**
* 设置Message属性
*
* @param message
* @param to
* @param cc
* @param bcc
* @return
*/
private Message setToAddress(Message message, String[] to, String[] cc, String[] bcc) {
try {
if (to != null) {
InternetAddress[] sendTo = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++) {
sendTo[i] = new InternetAddress(to[i], false);
if (logger.isDebugEnabled()) {
logger.debug("sending e-mail to: " + to[i]);
}
}
message.setRecipients(Message.RecipientType.TO, sendTo);
}
if (cc != null) {
InternetAddress[] copyTo = new InternetAddress[cc.length];
for (int i = 0; i < cc.length; i++) {
copyTo[i] = new InternetAddress(cc[i], false);
if (logger.isDebugEnabled()) {
logger.debug("copying e-mail to: " + cc[i]);
}
}
message.setRecipients(Message.RecipientType.CC, copyTo);
}
if (bcc != null) {
InternetAddress[] copyTo = new InternetAddress[bcc.length];
for (int i = 0; i < bcc.length; i++) {
copyTo[i] = new InternetAddress(bcc[i], false);
if (logger.isDebugEnabled()) {
logger.debug("blind copying e-mail to: " + bcc[i]);
}
}
message.setRecipients(Message.RecipientType.BCC, copyTo);
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
/**
* 发送普通文本邮件
*
* @param username
* @param password
* @param to
* @param cc
* @param bcc
* @param subject
* @param content
* @param mimeType 数据格式("text/html;charset=utf-8")
*/
private void sendMessage(String username, String password, String[] to, String[] cc, String[] bcc, String subject, String content, String mimeType) {
Session session = this.setProperties(username, password);
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(username + "@gmail.com"));
msg = this.setToAddress(msg, to, cc, bcc);
msg.setSubject(subject);
msg.setContent(content, mimeType);
msg.setSentDate(new Date());
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送HTML邮件
*
* @param username
* @param password
* @param to
* @param cc
* @param bcc
* @param subject
* @param content
*/
public void sendHtmlMessage(String username, String password, String[] to, String[] cc, String[] bcc, String subject, String content) {
String mimeType = "text/html;charset=utf-8";
this.sendMessage(username, password, to, cc, bcc, subject, content, mimeType);
}
/**
* 发送普通文本邮件
*
* @param username
* @param password
* @param to
* @param cc
* @param bcc
* @param subject
* @param content
*/
public void sendTextMessage(String username, String password, String[] to, String[] cc, String[] bcc, String subject, String content) {
String mimeType = "text/plain;charset=utf-8";
this.sendMessage(username, password, to, cc, bcc, subject, content, mimeType);
}
public static void main(String[] args) throws AddressException, MessagingException {
// try {
// String username = "webooking";
// String password = "ilovewebooking!#!$";
// String subject = "测试邮件";
// String[] to = {"arden.emily@gmail.com"};
// String content = "<a href='aa.html'>欢迎光临</a>";
// new GmailUtils().sendHtmlMessage(username, password, to, null, null, subject, content);
// } catch (Exception e) {
// e.printStackTrace();
// }
System.out.println(Long.MAX_VALUE);
}
}