您的位置:首页 > 编程语言 > Java开发

JAVA程序调用javax.mail发送邮件

2017-09-21 13:47 417 查看
我们公司用的QQ企业邮箱,所以本文的例子也是针对QQ企业邮箱。

一、创建邮件信息类MailInfo.java

import java.util.Properties; 

public class MailInfo {
private String mailServerHost;// 服务器ip  
private String mailServerPort;// 端口  
private String fromAddress;// 发送者的邮件地址  
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 String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] attachFileNames) {
this.attachFileNames = attachFileNames;
}

}

二、创建发送邮件类SimpleMail(2种方式一种发送html格式邮件;一种发送文本格式邮件)

import java.io.File;  

import java.util.Date;  

import java.util.Properties;   

import javax.activation.DataHandler;  

import javax.activation.FileDataSource;  

import javax.mail.Address;  

import javax.mail.Message;  

import javax.mail.Multipart;  

import javax.mail.Session;  

import javax.mail.Transport;  

import javax.mail.internet.InternetAddress;  

import javax.mail.internet.MimeBodyPart;  

import javax.mail.internet.MimeMessage;  

import javax.mail.internet.MimeMultipart; 

public class SimpleMail {
// 以文本格式发送邮件  

    public static boolean sendTextMail(MailInfo mailInfo) {       

        //判断是否需要身份认证  

        MyAuthenticator authenticator = null;  

       Properties properties = mailInfo.getProperties();  

        if (mailInfo.isValidate()) {  

            //如果需要身份认证,则创建一个密码验证器  

           authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());  

        }  
     //根据邮件会话属性和密码验证器构造一个发送邮件的session  

        Session sendMailSession = Session.getDefaultInstance(properties, authenticator);  

       try {  

           Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息   

           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());//设置邮件消息发送的时间  

            //mailMessage.setText(mailInfo.getContent());//设置邮件消息的主要内容                

            //MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象  

            Multipart mainPart = new MimeMultipart();  

           MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含附件内容的MimeBodyPart  

            //设置HTML内容  

            messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");  

            mainPart.addBodyPart(messageBodyPart);    

            //存在附件  

           String[] filePaths = mailInfo.getAttachFileNames();  

            if (filePaths != null && filePaths.length > 0) {  

               for(String filePath:filePaths){  

                    messageBodyPart = new MimeBodyPart();  

                    File file = new File(filePath);   

                   if(file.exists()){//附件存在磁盘中  

                        FileDataSource fds = new FileDataSource(file);//得到数据源  

                       messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPart  

                        messageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPart  

                        mainPart.addBodyPart(messageBodyPart);  

                    }  

                }  

           }  

            //将MimeMultipart对象设置为邮件内容     

           mailMessage.setContent(mainPart);  

           Transport.send(mailMessage);//发送邮件  

            return true;  

        } catch (Exception e) {  

           e.printStackTrace();    

        }  

       return false;  

    }     

      

    // 以HTML格式发送邮件   

   public static boolean sendHtmlMail(MailInfo mailInfo) {       

        //判断是否需要身份认证  

        MyAuthenticator authenticator = null;  

        Properties properties = mailInfo.getProperties();  

        if (mailInfo.isValidate()) {  

            // 如果需要身份认证,则创建一个密码验证器  

            authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());  

        }    

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  

       Session sendMailSession = Session.getDefaultInstance(properties, authenticator);  

        try{  

           Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息   

            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());//设置邮件消息发送的时间                

            //MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象  

            Multipart mainPart = new MimeMultipart();  

            MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含HTML内容的MimeBodyPart  

           //设置HTML内容  

            messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");  

           mainPart.addBodyPart(messageBodyPart);  

              

            //存在附件  

            String[] filePaths = mailInfo.getAttachFileNames();  

           if (filePaths != null && filePaths.length > 0) {  

                for(String filePath:filePaths){  

                    messageBodyPart = new MimeBodyPart();  

                   File file = new File(filePath);   

                    if(file.exists()){//附件存在磁盘中  

                        FileDataSource fds = new FileDataSource(file);//得到数据源  

                       messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPart  

                        messageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPart  

                        mainPart.addBodyPart(messageBodyPart);  

                    }  

               }  

           }  

            //将MimeMultipart对象设置为邮件内容     

           mailMessage.setContent(mainPart);  

           Transport.send(mailMessage);//发送邮件  

           return true;  

       }catch (Exception e) {  

           e.printStackTrace();  

        }  

       return false;  

    }  

}

三、创建邮件发送实现类(SendMail.java)

public class SendMail {

public static boolean sendHtmlMail(String title,String toAddress,String body) {
MailInfo mailInfo = new MailInfo();  

        mailInfo.setMailServerHost("smtp.exmail.qq.com");//服务器ip 

        mailInfo.setMailServerPort("465"); //服务器端口号

        mailInfo.setValidate(true); //是否需要身份验证 

        mailInfo.setUsername(""); //登录邮件发送服务器的用户名 

        mailInfo.setPassword("");//发件人邮箱密码  

        mailInfo.setFromAddress(""); //发送者的邮件地址  

        mailInfo.setToAddress(toAddress);//邮件接收者地址 

        mailInfo.setSubject(title); //邮件主题      
StringBuffer demo = new StringBuffer();  

        demo.append("<!DOCTYPE html>")  

        .append("<html lang=\"zh-CN\" xmlns=\"http://www.w3.org/1999/xhtml\">")  

        .append("<head>")  

        .append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">")

        .append("<style>")  

        .append("html,body,div,p,ul,li,ol,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,select,button,textarea,iframe,table,th,td,hr,em{margin:0;padding:0;}")

        .append("body{ background:#edeff0; height:100%;}")

        .append("body{ background:#edeff0; height:100%;}")

        .append(".msg_container{ background:#fff; width:1200px; margin:40px auto 0; border:3px solid #4294cf; min-height:500px; padding:3px;}") 

        .append(".msg_container .msg-tit{ height:60px; background:#4294cf;}") 

        .append(".msg_container .msg-tit h3{ font:24px/60px \"Microsoft Yahei\";color:#fff; text-indent:30px;}") 

        .append(".msg_container .msg-cont{ padding:50px 20px 0;}") 

        .append(".msg_container .msg-cont h4{ font:16px/40px \"Microsoft Yahei\";}") 

        .append(".msg_container .msg-cont p{ font:14px/32px \"Microsoft Yahei\"; text-indent:30px;}") 

        .append(".msg_container .msg-prompt{ width:98%; margin:80px auto; border-top:1px solid #ddd; font:12px/28px \"Microsoft Yahei\";}") 

        .append(".msg_container .msg-prompt .prpt-cont{ padding:30px 0 0 20px;}") 

        .append(".msg_container .msg-prompt .sk-msgbl{ color:#007ebd;}")

        .append(".msg_container .msg-cont tr{font-weight: normal;}")

        .append(".msg_container .msg-cont td ,.msg_container .msg-cont th{border: 1px solid #ccc;box-sizing: content-box;padding: 10px;text-align:center;}")

        .append("</style>")  

        .append("</head>")  

        .append("<body>")  

        .append("<div class=\"cms-container\">")

        .append("<main class=\"main\">")

        .append("<div class=\"inner-main\">")

        .append("<div class=\"msg_container\">")

        .append("<div class=\"msg-tit\"><h3>系统通知</h3></div>")

        //组装内容

        .append("<div class=\"msg-cont\">")

        .append(body)

        .append("</div>")

        //组装内容

        .append("<div class=\"msg-prompt\"><div class=\"prpt-cont\">本邮件由系统自动发送,请勿回复,祝您工作愉快! <br/>意见反馈邮箱:<a href=\"javascript:;\" class=\"sk-msgbl\"></a><br/></div></div>")

        .append("</div></div></main></div>")

        .append("</body>")  

        .append("</html>");

        mailInfo.setContent(demo.toString()); 
return  SimpleMail.sendHtmlMail(mailInfo);
}

public static boolean sendTextMail(String title,String content,String toAddress) {
MailInfo mailInfo = new MailInfo();  

        mailInfo.setMailServerHost("smtp.exmail.qq.com");//服务器ip 

        mailInfo.setMailServerPort("465"); //服务器端口号

        mailInfo.setValidate(true); //是否需要身份验证 

        mailInfo.setUsername(""); //登录邮件发送服务器的用户名 

        mailInfo.setPassword("");//发件人邮箱密码  

        mailInfo.setFromAddress(""); //发送者的邮件地址  

        mailInfo.setToAddress(toAddress);//邮件接收者地址 

        mailInfo.setSubject(title); //邮件主题

        mailInfo.setContent(content);//邮件内容
return SimpleMail.sendTextMail(mailInfo);
}

public static void test(){
System.out.println("测试");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: