• (Java) 发送邮件工具类


    依赖文件

    <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>
    package com.newpay.common;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.UnsupportedEncodingException;
    import java.util.Date;
    import java.util.Properties;
    
    public class EmailUtils {
    
        //发送的邮箱 内部代码只适用qq邮箱
        private static final String USER = "xxxx@qq.com";
        //授权密码 通过QQ邮箱设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务->开启POP3/SMTP服务获取
        private static final String PWD = "";
    
        private String[] to;
        private String[] cc;//抄送
        private String[] bcc;//密送
        private String[] fileList;//附件
        private String subject;//主题
        private String content;//内容,可以用html语言写
    
    
        //后加的防止题目过长或附件名称有中文进行全局定义
        static {
            System.setProperty("mail.mime.splitlongparameters","false");
            System.setProperty("mail.mime.charset","UTF-8");
        }
    
        public void sendMessage() throws MessagingException, UnsupportedEncodingException {
            // 配置发送邮件的环境属性
            final Properties props = new Properties();
            //下面两段代码是设置ssl和端口,不设置发送不出去。
            props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            //props.setProperty("mail.smtp.port", "465");
            props.setProperty("mail.smtp.socketFactory.port", "465");
            // 表示SMTP发送邮件,需要进行身份验证
            // 设置传输协议
            props.setProperty("mail.transport.protocol", "smtp");
            props.put("mail.smtp.auth", "true");
            //QQ邮箱的服务器 如果是企业邮箱或者其他邮箱得更换该服务器地址
            props.put("mail.smtp.host", "smtp.qq.com");
            // 发件人的账号
            props.put("mail.user", USER);
            // 访问SMTP服务时需要提供的密码
            props.put("mail.password", PWD);
    
            // 构建授权信息,用于进行SMTP进行身份验证
            Authenticator authenticator = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    // 用户名、密码
                    String userName = props.getProperty("mail.user");
                    String password = props.getProperty("mail.password");
                    return new PasswordAuthentication(userName, password);
                }
            };
            // 使用环境属性和授权信息,创建邮件会话
            Session mailSession = Session.getInstance(props, authenticator);
            // 创建邮件消息
            MimeMessage message = new MimeMessage(mailSession);
            BodyPart messageBodyPart = new MimeBodyPart();
            Multipart multipart = new MimeMultipart();
            // 设置发件人
            InternetAddress form = new InternetAddress(
                    props.getProperty("mail.user"));
            message.setFrom(form);
            //发送
            if (to != null) {
                String toList = getMailList(to);
                InternetAddress[] iaToList = new InternetAddress().parse(toList);
                message.setRecipients(Message.RecipientType.TO, iaToList); // 收件人
            }
            //抄送
            if (cc != null) {
                String toListcc = getMailList(cc);
                InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc);
                message.setRecipients(Message.RecipientType.CC, iaToListcc); // 抄送人
            }
            //密送
            if (bcc != null) {
                String toListbcc = getMailList(bcc);
                InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc);
                message.setRecipients(Message.RecipientType.BCC, iaToListbcc); // 密送人
            }
            message.setSentDate(new Date()); // 发送日期 该日期可以随意写,你可以写上昨天的日期(效果很特别,亲测,有兴趣可以试试),或者抽象出来形成一个参数。
            message.setSubject(subject); // 主题
            message.setText(content); // 内容
            //显示以html格式的文本内容
            messageBodyPart.setContent(content,"text/html;charset=utf-8");
            multipart.addBodyPart(messageBodyPart);
            //保存多个附件
            if(fileList!=null){
                addTach(fileList, multipart);
            }
            message.setContent(multipart);
            // 发送邮件
            Transport.send(message);
        }
    
        public void setTo(String[] to) {
            this.to = to;
        }
    
        public void setCc(String[] cc) {
            this.cc = cc;
        }
    
        public void setBcc(String[] bcc) {
            this.bcc = bcc;
        }
    
        public void setSubject(String subject) {
            this.subject = subject;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public void setFileList(String[] fileList) {
            this.fileList = fileList;
        }
    
        private String getMailList(String[] mailArray) {
            StringBuffer toList = new StringBuffer();
            int length = mailArray.length;
            if (mailArray != null && length < 2) {
                toList.append(mailArray[0]);
            } else {
                for (int i = 0; i < length; i++) {
                    toList.append(mailArray[i]);
                    if (i != (length - 1)) {
                        toList.append(",");
                    }
                }
            }
            return toList.toString();
        }
    
        //添加多个附件
        public void addTach(String fileList[], Multipart multipart) throws MessagingException, UnsupportedEncodingException {
            for (int index = 0; index < fileList.length; index++) {
                MimeBodyPart mailArchieve = new MimeBodyPart();
                FileDataSource fds = new FileDataSource(fileList[index]);
                mailArchieve.setDataHandler(new DataHandler(fds));
                mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"));
                multipart.addBodyPart(mailArchieve);
            }
        }
    
    }
  • 相关阅读:
    c++中的stack实现
    非虚函数是静态绑定
    函数返回const,以便控制访问
    析构函数为虚函数
    c++中初始化列表顺序和声明顺序一致
    define的误用
    模板就是让编译器帮你写代码
    mysql代码中设置变量
    拼接index
    python import vs from import
  • 原文地址:https://www.cnblogs.com/zyulike/p/12914952.html
Copyright © 2020-2023  润新知