public class MailUtils {
private static String host;
private static String username;
private static String password;
private static String port;
private static String fromAdr;
private static String sendName;
// sendName + from 组成邮箱的发件人信息
static {
try {
host = "smtp.sina.com";
username = "xxxyy@sina.com";
password = "xxx";
port = "465";
fromAdr = "sys@sina.com";
sendName = "测试mail";
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送邮件
* @param toAdr 收件人地址,可多个
* @param title 邮件标题
* @param body 主体内容
* @param filepath 附件地址
* @return
*/
public static boolean sendMail(String toAdr, String title, String body,
List<String> filepath) {
if (body == null || "".equals(body)) {
body = "";
}
if (title == null || "".equals(title)) {
title = "无主题";
}
try {
// 创建Properties对象
Properties props = System.getProperties();
// 创建信件服务器
props.setProperty("mail.smtp.host", host);
props.setProperty("mail.smtp.auth", "true"); // 通过验证
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", port);
//props.setProperty("mail.smtp.socketFactory.port", "465");
// 得到默认的对话对象
Session session = Session.getDefaultInstance(props, null);
// 创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
sendName = MimeUtility.encodeText(sendName);
msg.setFrom(new InternetAddress(sendName + "<" + fromAdr + ">"));
// 创建收件人列表可多个
if (toAdr != null && toAdr.trim().length() > 0) {
String[] arr = toAdr.split(",");
int receiverCount = arr.length;
if (receiverCount > 0) {
InternetAddress[] address = new InternetAddress[receiverCount];
for (int i = 0; i < receiverCount; i++) {
System.out.println(arr[i]);
address[i] = new InternetAddress(arr[i]);
}
msg.addRecipients(Message.RecipientType.TO, address);
msg.setSubject(title);
// 后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
// 附件操作
if (filepath != null && filepath.size() > 0) {
for (String filename : filepath) {
MimeBodyPart mbp = new MimeBodyPart();
// 得到数据源
FileDataSource fds = new FileDataSource(filename);
// 得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
// 得到文件名同样至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(body);
mp.addBodyPart(mbp);
// 移走集合中的所有元素
filepath.clear();
// Multipart加入到信件
msg.setContent(mp);
} else {
// 设置邮件正文
msg.setText(body);
}
// 设置信件头的发送日期
msg.setSentDate(new Date());
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
// 发送信件
transport.sendMessage(msg,msg.getRecipients(Message.RecipientType.TO));
transport.close();
System.out.println("发送邮件完毕!");
return true;
} else {
System.out.println("没有填写收件人!");
return false;
}
} else {
System.out.println("没有填写收件人!");
return false;
}
} catch(AddressException ae){
System.out.println("地址错误");
}catch(MessagingException me){
}catch(UnsupportedEncodingException ue){
}catch (Exception e) {
System.out.println("rr");
e.printStackTrace();
}
return false;
}
public static void main(String[] args) throws AddressException,
UnsupportedEncodingException, MessagingException {
List<String> filepath = new ArrayList<String>();
filepath.add("D:\\ss.log");
sendMail(
"xxxxx@sina.com,sxxx@sina.com",
"验证信息邮件", "程序验证邮件_有附件", filepath);
}
}
注: 要设置邮箱开通SMTP服务。