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

我们公司用的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("测试");
}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值