工厂类
package com.mgk.tqyb.email; import static com.mgk.tqyb.email.EmailEnum.*; public class EmaiFactory { public static Email getEmai(EmailEnum emailEnum){ Email email = null; switch (emailEnum) { case Text: email = new EmailText(); System.out.println("文本"); break; case Picture: System.out.println("图片大附件"); break; } return email; } }
email类
package com.mgk.tqyb.email; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import java.io.FileNotFoundException; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.Properties; public abstract class Email { //发件人信息 private String addresserMessage; //发件人邮箱 private String getAddressEmail; //邮箱密码16位,这里从qq邮箱取的POP3/SMTP服务 private String emailPassword; //收件人邮箱 private String recipients; //邮件服务器 private String emailServer; private String textData; private String emailTitle; public String getEmailTitle() { return emailTitle; } public void setEmailTitle(String emailTitle) { this.emailTitle = emailTitle; } public String getTextData() { return textData; } public void setTextData(String textData) { this.textData = textData; } public String getAddresserMessage() { return addresserMessage; } public void setAddresserMessage(String addresserMessage) { this.addresserMessage = addresserMessage; } public String getGetAddressEmail() { return getAddressEmail; } public void setGetAddressEmail(String getAddressEmail) { this.getAddressEmail = getAddressEmail; } public String getEmailPassword() { return emailPassword; } public void setEmailPassword(String emailPassword) { this.emailPassword = emailPassword; } public String getRecipients() { return recipients; } public void setRecipients(String recipients) { this.recipients = recipients; } public String getEmailServer() { return emailServer; } public void setEmailServer(String emailServer) { this.emailServer = emailServer; } //收件人接受的信息 public abstract void sendMessage(Properties properties) throws GeneralSecurityException, MessagingException; //加载邮件内容 public abstract Properties loadEmail() throws IOException, GeneralSecurityException; //qq特性 public void setQQStyle(Properties properties) throws GeneralSecurityException { } //发送邮件 public void sendEmail() throws IOException, GeneralSecurityException, MessagingException { sendMessage( loadEmail()); }; }
枚举类
package com.mgk.tqyb.email; public enum EmailEnum { Text,Picture; }
email发送文本类
package com.mgk.tqyb.email; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.*; import java.security.GeneralSecurityException; import java.util.Properties; public class EmailText extends Email{ private Properties properties = new Properties(); @Override public Properties loadEmail() throws IOException, GeneralSecurityException { InputStream in = EmailText.class.getClassLoader().getResourceAsStream("email.properties"); properties.load(in); setAddresserMessage(properties.get("emailAddresserMessage").toString());//发件人信息 setGetAddressEmail(properties.get("emailAddresserEmail").toString());//发件人邮箱 setEmailPassword(properties.get("emailPassword").toString());//发件人密码 setRecipients(properties.get("emailRecipients").toString());//收件人邮箱 setEmailServer(properties.get("emailServer").toString());//邮箱服务 Properties emailProperties = new Properties(); emailProperties.setProperty("mail.host",getEmailServer()); emailProperties.setProperty("mail.transport.protocol","smtp"); emailProperties.setProperty("mail.smtp.auth","true"); setQQStyle(emailProperties); return emailProperties; } @Override public void setQQStyle(Properties properties) throws GeneralSecurityException { if (getEmailServer().toString().indexOf("qq") != -1){ //设置QQ特性设置SSL加密 MailSSLSocketFactory msf = new MailSSLSocketFactory(); msf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", msf); } } @Override public void sendMessage(Properties properties) throws GeneralSecurityException, MessagingException { //验证身份 MyAuthenticator myAuthenticator = new MyAuthenticator(); myAuthenticator.setUsername(getRecipients());//邮箱 myAuthenticator.setPassword(getEmailPassword());//密码 //创建Session 类包mail Session defaultInstance = Session.getDefaultInstance(properties,myAuthenticator); //是否Debug运行 defaultInstance.setDebug(false); //获取Transport对象用来链接服务器 Transport transport = defaultInstance.getTransport(); //连接邮箱服务器 transport.connect(getEmailServer(),getGetAddressEmail(),getEmailPassword()); //创建邮件对象用来发送邮件 MimeMessage mimeMessage = new MimeMessage(defaultInstance); //发送人 mimeMessage.setFrom(new InternetAddress(getAddresserMessage())); //邮箱主题 mimeMessage.setSubject(getEmailTitle()); //接收人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(getRecipients())); //邮件内容 mimeMessage.setContent(getTextData(),"text/html;charset=UTF-8"); //发送邮件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); try { } finally { //连接必须得关闭 transport.close(); } } public static void main(String[] args) throws IOException, GeneralSecurityException, MessagingException { Email em = new EmailText(); em.setEmailTitle("hhh"); StringBuilder sbf = new StringBuilder(); sbf.append("这是一段话"); em.setTextData(sbf.toString()); em.sendEmail(); } }
验证器类
package com.mgk.tqyb.email; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator { private String username; private String password; public MyAuthenticator(){ } public MyAuthenticator(String username, String password) { this.username = username; this.password = password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
email.properties文件
#邮件服务器 emailServer=smtp.qq.com #收件人信息 emailRecipients=********@qq.com #发件人密码 emailPassword=******** #发件人信息 emailAddresserMessage=********@qq.com #发件人邮箱 emailAddresserEmail=********@qq.com
获得授权码发件人16密码
进入设置,找到账户,下拉找到SMTP服务开启服务,即可获得