1.新建model
SendMail.java
import java.util.Properties; public class SendMail { // 發送郵件的服務器的IP和端口 private String mailServerHost; //服務器名稱,類似163的: smtp.163.com private String mailServerPort = "25"; //服務器端口號 private String fromAddress; //發送郵件的地址 private String addressName; //發送郵件的郵箱名稱 private String toAddress; //收件人地址 private String userName; //和郵箱地址保持一致 private String password; //郵件安全密碼,網易的是客戶端授權密碼 private boolean validate = false; private String subject; //郵件標題 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); 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; } public String getAddressName() { return addressName; } public void setAddressName(String addressName) { this.addressName = addressName; } }
2.發送郵件實現類
MailSender.java
import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; public class MailSender { /** * 以文本格式發送郵件 */ public boolean sendTextMail(SendMail mailInfo) { // 判斷是否需要身份認證 Authentication authenticator = null; Properties pro = mailInfo.getProperties(); if (mailInfo.isValidate()) { // 如果需要身份認證,則創建一個密碼驗證器 authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword()); } // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session Session sendMailSession = Session .getDefaultInstance(pro, authenticator); try { Message mailMessage = new MimeMessage(sendMailSession); Address from = new InternetAddress(mailInfo.getFromAddress()); mailMessage.setFrom(from); Address to = new InternetAddress(mailInfo.getToAddress()); mailMessage.setRecipient(Message.RecipientType.TO, to); mailMessage.setSubject(mailInfo.getSubject()); mailMessage.setSentDate(new Date()); String mailContent = mailInfo.getContent(); mailMessage.setText(mailContent); Transport.send(mailMessage); return true; } catch (MessagingException ex) { ex.printStackTrace(); } return false; } /** * 以HTML格式發送郵件 */ public boolean sendHtmlMail(SendMail mailInfo) { // 判斷是否需要身份認證 Authentication authenticator = null; Properties pro = mailInfo.getProperties(); if (mailInfo.isValidate()) { authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword()); } // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session Session sendMailSession = Session .getDefaultInstance(pro, authenticator); try { // 根據session創建一個郵件消息 Message mailMessage = new MimeMessage(sendMailSession); mailMessage.setFrom(new InternetAddress(mailInfo.getFromAddress())); //設置自定義發件人昵稱 String nick=""; try { nick=javax.mail.internet.MimeUtility.encodeText(mailInfo.getAddressName()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } mailMessage.setFrom(new InternetAddress(nick+" <"+mailInfo.getFromAddress()+">")); // Address from = new InternetAddress(mailInfo.getFromAddress()); // mailMessage.setFrom(from); Address to = new InternetAddress(mailInfo.getToAddress()); // Message.RecipientType.TO屬性表示接收者的類型為TO mailMessage.setRecipient(Message.RecipientType.TO, to); mailMessage.setSubject(mailInfo.getSubject()); mailMessage.setSentDate(new Date()); Multipart mainPart = new MimeMultipart(); BodyPart html = new MimeBodyPart(); html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); mainPart.addBodyPart(html); mailMessage.setContent(mainPart); Transport.send(mailMessage); return true; } catch (MessagingException ex) { ex.printStackTrace(); } return false; } }
3.郵件發送工具類
SendMailUtil.java
import java.util.HashMap; import java.util.Map; public class SendMailUtil {private static SendMail mail() { SendMail mail = new SendMail(); mail.setMailServerHost("smtp.yeah.net"); mail.setMailServerPort("25"); mail.setValidate(true); mail.setUserName("發送郵件的郵箱地址"); mail.setPassword("郵件服務器的客戶端授權密碼"); mail.setFromAddress("發送郵件的郵箱地址"); mail.setAddressName("郵箱名稱"); mail.setSubject("標題"); return mail; } public static boolean checkEmail(String email) {// 驗證郵箱的正則表達式 String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}"; //p{Alpha}:內容是必選的,和字母字符[\p{Lower}\p{Upper}]等價。如:200896@163.com不是合法的。 //w{2,15}: 2~15個[a-zA-Z_0-9]字符;w{}內容是必選的。 如:dyh@152.com是合法的。 //[a-z0-9]{3,}:至少三個[a-z0-9]字符,[]內的是必選的;如:dyh200896@16.com是不合法的。 //[.]:'.'號時必選的; 如:dyh200896@163com是不合法的。 //p{Lower}{2,}小寫字母,兩個以上。如:dyh200896@163.c是不合法的。 if (email.matches(format)) { return true;// 郵箱名合法,返回true } else { return false;// 郵箱名不合法,返回false } } public static boolean Send(String con,String email,String subject){ SendMail mail = mail(); mail.setSubject(subject); mail.setContent(con); if (email == null || "".equals(email)) { return false; } mail.setToAddress(email); try { MailSender sms = new MailSender(); boolean flag = sms.sendHtmlMail(mail); if (flag == false) return false; } catch (Exception e) { e.printStackTrace(); return false; } return true; } }