• 爪哇国新游记之三十二----邮件发送


    由三个类完成任务,第一个为主,main中是用法示例。

    纯邮件发送和带附件发送邮件皆可,大家请参照main函数中用法。

    package com.ufo.util.mail;
    
    import java.util.Date;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    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 BaseMailService{
        protected String smtpServer;
        protected String smtpUsername;
        protected String smtpPassword;
        protected String from;
        protected String to;
        protected String cc;
        protected String bcc;
    
        /**
         * 无参构造函数
         */
        public BaseMailService(){
            
        }
        
        /**
         * 发送邮件,无附件
         * 
         * @param title
         * @param content
         * @return
         * @throws Exception
         */
        public boolean sendMail(String title,String content) throws Exception{
            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.host", smtpServer);
            // 获得邮件会话对象
            Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
            /** *************************************************** */
            // 创建MIME邮件对象
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(from));// 发件人
            
            // To收件人
            mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(to));
            
            // Cc收件人
            InternetAddress[] arr=getInternetAddressArr(cc);
            if(arr!=null && arr.length>0 ){
                mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(cc));
            }
            
            // Bcc收件人
            arr=getInternetAddressArr(bcc);
            if(arr!=null && arr.length>0){
                mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bcc));
            }
            
            mimeMessage.setSubject(title);
            mimeMessage.setSentDate(new Date());// 发送日期
            Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
            /** *************************************************** */
            BodyPart bodyPart = new MimeBodyPart();// 正文
            bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
            mp.addBodyPart(bodyPart);
            mimeMessage.setContent(mp);// 设置邮件内容对象
            
            Transport.send(mimeMessage);// 发送邮件
            
            return true;
        }
        
        /**
         * 发带附件的邮件
         * @param title
         * @param content
         * @param files
         * @return
         * @throws Exception
         */
        public boolean sendMail(String title,String content,String[] files) throws Exception{
            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.host", smtpServer);
            // 获得邮件会话对象
            Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
            /** *************************************************** */
            // 创建MIME邮件对象
            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.setFrom(new InternetAddress(from));// 发件人
            
            // To收件人
            mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(to));
            
            // Cc收件人
            InternetAddress[] arr=getInternetAddressArr(cc);
            if(arr!=null && arr.length>0 ){
                mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(cc));
            }
            
            // Bcc收件人
            arr=getInternetAddressArr(bcc);
            if(arr!=null && arr.length>0){
                mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bcc));
            }
            
            mimeMessage.setSubject(title);
            mimeMessage.setSentDate(new Date());// 发送日期
            Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
            /** *************************************************** */
            BodyPart bodyPart = new MimeBodyPart();// 正文
            bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
            mp.addBodyPart(bodyPart);
            mimeMessage.setContent(mp);// 设置邮件内容对象
            
            // 附件部分
            if(files!=null && files.length>0){
                for(String affix:files){
                    //添加附件
                    BodyPart messageBodyPart= new MimeBodyPart();
                    
                    DataSource source = new FileDataSource(affix);
                    //添加附件的内容
                    messageBodyPart.setDataHandler(new DataHandler(source));
                    //添加附件的标题
                    messageBodyPart.setFileName(affix);
                    mp.addBodyPart(messageBodyPart);
                }
            }
            
            Transport.send(mimeMessage);// 发送邮件
            
            return true;
        }
        
        /**
         * Mail地址转化
         * @param mialAddr
         * @return
         * @throws Exception
         */
        protected InternetAddress[] getInternetAddressArr(String mialAddr) throws Exception{
            if(mialAddr==null){
                return null;
            }
            
            String[] arr=mialAddr.split(",");
            
            InternetAddress[] retval=new InternetAddress[arr.length];
            
            for(int i=0;i<arr.length;i++){
                retval[i]=new InternetAddress(arr[i]);
            }
            
            return retval;
        }
        
        public String getSmtpServer() {
            return smtpServer;
        }
        public void setSmtpServer(String smtpServer) {
            this.smtpServer = smtpServer;
        }
        public String getSmtpUsername() {
            return smtpUsername;
        }
        public void setSmtpUsername(String smtpUsername) {
            this.smtpUsername = smtpUsername;
        }
        public String getSmtpPassword() {
            return smtpPassword;
        }
        public void setSmtpPassword(String smtpPassword) {
            this.smtpPassword = smtpPassword;
        }
        
        public String getFrom() {
            return from;
        }
    
        public void setFrom(String from) {
            this.from = from;
        }
    
        public String getTo() {
            return to;
        }
    
        public void setTo(String to) {
            this.to = to;
        }
    
        public String getCc() {
            return cc;
        }
    
        public void setCc(String cc) {
            this.cc = cc;
        }
    
        public String getBcc() {
            return bcc;
        }
    
        public void setBcc(String bcc) {
            this.bcc = bcc;
        }
        
        public static void main(String[] args) throws Exception{
            BaseMailService bms=new BaseMailService();
            
            // 邮件服务器,用户,收发人设置
            bms.setSmtpServer("Ds23M0ds016.cn.ufo.com");
            bms.setSmtpUsername("user");
            bms.setSmtpPassword("password");
            bms.setFrom("adm@us.ufo.com");
            bms.setTo("receiver@cn.ufo.com");
            
            // 邮件标题
            String title ="Hello";
            
            // 邮件正文
            StringBuilder sb = new StringBuilder();
            sb.append("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">");
            sb.append("<html>");
            sb.append(" <head>");
            sb.append("  <title> " + title + " </title>");
            sb.append(" </head>");
            sb.append("");
            sb.append(" <body>");
            sb.append("  <h4>Hi:</h4>");
            sb.append("  <p>How are you!. </p>");
            sb.append("  <p>你好</p>");
            sb.append(" </body>");
            sb.append("</html>");
            String content = sb.toString();
            
            String[] files={"c:\1.xml","c:\2.xml"};
            
            bms.sendMail(title, content, files);
        }
    }
    
    // 辅助类ByteArrayDataSource
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import javax.activation.DataSource;
    
    public class ByteArrayDataSource implements DataSource {
    
        private final String contentType;
        private final byte[] buf;
        private final int len;
    
        public ByteArrayDataSource(byte[] buf, String contentType) {
            this(buf, buf.length, contentType);
        }
    
        public ByteArrayDataSource(byte[] buf, int length, String contentType) {
            this.buf = buf;
            this.len = length;
            this.contentType = contentType;
        }
    
        public String getContentType() {
            if (contentType == null)
                return "application/octet-stream";
            return contentType;
        }
    
        public InputStream getInputStream() {
            return new ByteArrayInputStream(buf, 0, len);
        }
    
        public String getName() {
            return null;
        }
    
        public OutputStream getOutputStream() {
            throw new UnsupportedOperationException();
        }
    }
    
    // 辅助类SmtpAuthenticator
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    
    /**
     * Smtp认证
     */
    public class SmtpAuthenticator extends Authenticator {
        String username = null;
        String password = null;
    
        // SMTP身份验证
        public SmtpAuthenticator(String username, String password) {
            this.username = username;
            this.password = password;
        }
    
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(this.username, this.password);
        }
    
    }
  • 相关阅读:
    cmake自动添加宏定义
    Wapiti web扫描工具使用——支持ssl,看官方示例报告就知道如何支持带cookie和用户名密码的扫描了
    AI入门(重实践)书籍推荐
    初探零信任模型——就是假设所有的设备、人员等都是不可信的,在此基础上构建安全策略
    概率论疑难问题---7、通俗理解最小二乘法
    概率论疑难问题---6、极大似然估计
    概率论疑难问题---5、通俗理解中心极限定理
    matplotlib画直方图
    numpy数组添加元素
    概率论疑难问题---4、通俗理解概率论中的“矩”
  • 原文地址:https://www.cnblogs.com/heyang78/p/4184172.html
Copyright © 2020-2023  润新知