package util;
/**
*
* @auter ssk
* @apiNote 依赖 javamail activation
*
*/
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
public class Email {
private String myEmailAccount=null; //发件用户名
private String myEmailPassword=null; //授权码
private String myEmailSMTPHost=null; //smtp.host
private String myEmailPort=null; //smtp端口
private String subject=""; //主题
private boolean isSsl=false; //ssl
private boolean debug=false;
private Properties properties=null; //javamail 配置
private MimeMultipart mimeMultipart=null;
private List<InternetAddress> to=new LinkedList<InternetAddress>(); //发送人
private List<InternetAddress> cc=new LinkedList<InternetAddress>(); //抄送人
private List<InternetAddress> bcc=new LinkedList<InternetAddress>(); //密送人
public Email(String myEmailAccount, String myEmailPassword, String myEmailSMTPHost, String myEmailPort) {
this();
this.myEmailAccount = myEmailAccount;
this.myEmailPassword = myEmailPassword;
this.myEmailSMTPHost = myEmailSMTPHost;
this.myEmailPort = myEmailPort;
}
public Email(){
properties=new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", "smtp.qq.com");
properties.put("mail.smtp.port", 25);
properties.put("mail.smtp.auth", "true");
myEmailAccount ="2***289498@qq.com";
myEmailPassword="***lkzkjnpaxdjgd"; //必须是授权码
myEmailSMTPHost="stmp.qq.com";
myEmailPort="25";
}
public void setMyEmailAccount(String myEmailAccount) {
this.myEmailAccount = myEmailAccount;
}
public void setMyEmailPassword(String myEmailPassword) {
this.myEmailPassword = myEmailPassword;
}
public void setMyEmailSMTPHost(String myEmailSMTPHost) {
this.myEmailSMTPHost = myEmailSMTPHost;
properties.put("mail.smtp.host",this.myEmailSMTPHost);
}
public void setMyEmailPort(String myEmailPort) {
this.myEmailPort = myEmailPort;
properties.put("mail.smtp.port", myEmailPort);
}
public void setSsl(boolean ssl){
if(ssl&&!isSsl)
{
/*开启ssl 不开启记得设置端口*/
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.put("mail.smtp.socketFactory.port", myEmailPort);
/**/
}else if(!ssl&&isSsl){
properties.remove("mail.smtp.ssl.enable");
properties.remove("mail.smtp.socketFactory.class");
properties.remove("mail.smtp.socketFactory.fallback");
properties.remove("mail.smtp.socketFactory.port");
}
}
/**
* @deprecated 设置主题
* @param subject
*/
public void setSubject(String subject) {
this.subject = subject;
}
/**
* @deprecated 是否开启debug
* @param debug
*/
public void setDebug(boolean debug) {
if(this.debug!=debug){
if(debug){properties.put("mail.debug", "true");}
else properties.remove("mail.debug");
}
}
/**
* 设置内容
* @param mimeMultipart
*/
public void setMimeMultipart(MimeMultipart mimeMultipart) {
this.mimeMultipart = mimeMultipart;
}
public String getMyEmailAccount() {
return myEmailAccount;
}
public String getMyEmailPassword() {
return myEmailPassword;
}
public String getMyEmailSMTPHost() {
return myEmailSMTPHost;
}
public String getMyEmailPort() {
return myEmailPort;
}
public String getSubject() {
return subject;
}
public MimeMultipart getMimeMultipart() {
return mimeMultipart;
}
public List<InternetAddress> getTo() {
return to;
}
public List<InternetAddress> getCc() {
return cc;
}
public List<InternetAddress> getBcc() {
return bcc;
}
/** MimeMultipart 转化MimeBodyPart */
private MimeBodyPart toMimeBodyPart() throws MessagingException {
MimeBodyPart old=new MimeBodyPart();
old.setContent(mimeMultipart);
return old;
}
/**
* @deprecated 添加图片 cid 是图片指定
* */
public void addImage(String path) throws MessagingException {
long id=new Date().getTime();
MimeBodyPart text=new MimeBodyPart();
text.setContent("<img src='cid:"+id+"'/>","text/html;charset=UTF-8");
MimeBodyPart image=new MimeBodyPart();
DataHandler dataImage= new DataHandler(new FileDataSource(path));
image.setDataHandler(dataImage);
image.setContentID(Long.valueOf(id).toString());
MimeMultipart news =new MimeMultipart();
news.addBodyPart(text);
news.addBodyPart(image);
news.setSubType("related");
if(mimeMultipart!=null){
MimeBodyPart text_img=new MimeBodyPart();
text_img.setContent(news);
MimeMultipart finally_=new MimeMultipart();
finally_.addBodyPart(toMimeBodyPart());
finally_.addBodyPart(text_img);
finally_.setSubType("alternative");
mimeMultipart=finally_;
}else {
mimeMultipart=news;
}
}
/**添加文本*/
public void addText(String text) throws MessagingException {
MimeBodyPart texts=new MimeBodyPart();
texts.setContent(text,"text/html;charset=UTF-8");
if(mimeMultipart==null){
mimeMultipart=new MimeMultipart();
mimeMultipart.addBodyPart(texts);
mimeMultipart.setSubType("alternative");
}else {
MimeMultipart news=new MimeMultipart();
news.addBodyPart(toMimeBodyPart());
news.addBodyPart(texts);
news.setSubType("alternative");
mimeMultipart=news;
}
}
/**
* @deprecated 添加附件
*
*
* */
public void addFile(String file) throws MessagingException {
MimeBodyPart filee=new MimeBodyPart();
DataHandler data=new DataHandler(new FileDataSource(file));
filee.setDataHandler(data);
filee.setFileName(new File(file).getName());
if(mimeMultipart==null) {
mimeMultipart=new MimeMultipart();
mimeMultipart.addBodyPart(filee);
mimeMultipart.setSubType("mixed");
}else {
MimeMultipart news=new MimeMultipart();
news.addBodyPart(toMimeBodyPart());
news.addBodyPart(filee);
news.setSubType("mixed");
mimeMultipart=news;
}
}
/**添加发送人*/
public void addTo(String account[]) throws AddressException {
for(String ac:account){
addTo(ac);
}
}
public void addTo(String account) throws AddressException {
to.add(new InternetAddress(account));
}
/**添加抄送人*/
public void addCc(String account[]) throws AddressException {
for(String ac:account){
addCc(ac);
}
}
public void addCc(String account) throws AddressException {
cc.add(new InternetAddress(account));
}
public void addBcc(String account[]) throws AddressException {
for(String ac:account){
addBcc(ac);
}
}
public void addBcc(String account) throws AddressException {
bcc.add(new InternetAddress(account));
}
/**清除内容*/
public void clear(){
mimeMultipart=null;
}
/**发送*/
public void sendMessage() throws MessagingException, IOException {
Session session=Session.getInstance(properties);
MimeMessage mimeMessage=new MimeMessage(session);
mimeMessage.setSubject(subject);
mimeMessage.setFrom(myEmailAccount);
mimeMessage.setContent(mimeMultipart);
mimeMessage.setRecipients(Message.RecipientType.TO,to.toArray(new InternetAddress[to.size()]));
mimeMessage.setRecipients(Message.RecipientType.CC,cc.toArray(new InternetAddress[cc.size()]));
mimeMessage.setRecipients(Message.RecipientType.BCC,bcc.toArray(new InternetAddress[bcc.size()]));
to.clear();
cc.clear();
bcc.clear();
mimeMessage.saveChanges();
Transport transport=session.getTransport();
transport.connect(myEmailAccount,myEmailPassword);
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();
}
}
验证
package shop.register;
import util.Email;
import javax.mail.MessagingException;
import java.io.IOException;
public class SendEmail {
private static SendEmail sendEmail;
private static Email email;
static {
email=new Email();
email.setMyEmailAccount("******@qq.com"); //设置发件人邮箱
email.setMyEmailPassword("*****"); //设置授权码
email.setMyEmailPort("465"); //端口
email.setSsl(true); //开启ssl
email.setSubject("验证码");
email.setDebug(true);
}
public static SendEmail getInstance(){
if(sendEmail==null) sendEmail=new SendEmail();
return sendEmail;
}
public void send(String email,String random) throws MessagingException, IOException {
SendEmail.email.addText(random);
SendEmail.email.addTo(email);
SendEmail.email.sendMessage();
SendEmail.email.setMimeMultipart(null);
}
public static void main(String args[]) throws IOException, MessagingException {
SendEmail.getInstance().send("19766*****@qq.com","参数1");
SendEmail.getInstance().send("19766*****@qq.com","参数2");
SendEmail.getInstance().send("19766*****@qq.com","参数3");
}
}