zoukankan      html  css  js  c++  java
  • java spring boot项目带附件发送邮件

    最近做了一个对账文件需要将对账文件发送给指定邮箱,首先发送邮件必须得有发送者,邮件内容(主题、附件),接收者,发送者SMTP服务器地址,一开始毫无头绪,在网上看到了一大佬写的个人感觉还是条例还是很清晰的,我就是参考着这个写的,链接如下:https://www.cnblogs.com/yejg1212/archive/2013/06/01/3112702.html 

    一、首先导包/依赖 如下:
      如果是需要jar包可以打开注释内链接去选择你要的版本去下载jar
      
            <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
            <dependency>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.4</version>
            </dependency>

     二、配置文件

      PS:关于smtp服务器 一般自己的邮箱都可以找得到,找不到就可以求助度娘或者同事或者公司的网络管理员

    #smtp服务器
    PSBC_MAIL_HOST=tmu-econ.mail.allianz
    #身份验证 我这儿暂时用不到
    PSBC_MAIL_AUTH=false
    #邮件发件人
    PSBC_MAIL_SENDER=it.support@allianz-assistance.com.cn
    #邮件收件人
    PSBC_MAIL_RECIPIENT=external.yang.cheng@allianz.com
    三、邮件Utils类
      
    如果没有特殊需要就 doSendEmail方法就好,我是在测试时是直接main方法测试的,需要的都以参数形式传过来就好了,另外加了多收件人方法里面有注释
      
      初始版本可以去看大佬的 https://www.cnblogs.com/yejg1212/archive/2013/06/01/3112702.html 
    public class MailUtil {
        private MimeMessage message;
        private Session session;
        private Transport transport;
    
        private String mailHost = "tmu-econ.mail.allianz";
        private String sender_username = "it.support@axxxxxxxx.com.cn";
        private String sender_password = "";
    
        private Properties properties = new Properties();
    
        /***
         * 重写初始化加载方法
         * @author y.c
         * @date 2021-05-25 11:27:36
         *
         */
        public MailUtil(boolean debug,String mailHost,String senderUsername) {
            this.mailHost = mailHost;
            this.sender_username = senderUsername;
            this.sender_password = sender_password;
    
            session = Session.getInstance(properties);
            session.setDebug(debug);// 开启后有调试信息
            message = new MimeMessage(session);
        }
       /***
         * 将发送邮件增加返回值
         * @author y.c
         * @date 2021-05-25 11:35:53
         *
         */
        public boolean doSendEmail(String subject, String sendHtml, String receiveUser, File attachment) {
            boolean status = false;
            try {
                // 发件人
                InternetAddress from = new InternetAddress(sender_username);
                message.setFrom(from);
    
                // 多个收件人
                String[] addressArr = receiveUser.split(";");
                InternetAddress[] toAddress = new InternetAddress[addressArr.length];
                for (int i = 0; i < addressArr.length; i++) {
                    toAddress[i] = new InternetAddress(addressArr[i]);
                }
                message.setRecipients(Message.RecipientType.TO, toAddress);
    
                //单个收件人
                //InternetAddress to = new InternetAddress(receiveUser);
                //message.setRecipient(Message.RecipientType.TO, to);
    
                // 邮件主题
                message.setSubject(subject);
    
                // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
                Multipart multipart = new MimeMultipart();
    
                // 添加邮件正文
                BodyPart contentPart = new MimeBodyPart();
                contentPart.setContent(sendHtml, "text/html;charset=UTF-8");
                multipart.addBodyPart(contentPart);
    
                // 添加附件的内容
                if (attachment != null) {
                    BodyPart attachmentBodyPart = new MimeBodyPart();
                    DataSource source = new FileDataSource(attachment);
                    attachmentBodyPart.setDataHandler(new DataHandler(source));
    
                    // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定
                    // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
                    //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                    //messageBodyPart.setFileName("=?GBK?B?" + enc.encode(attachment.getName().getBytes()) + "?=");
    
                    //MimeUtility.encodeWord可以避免文件名乱码
                    attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName()));
                    multipart.addBodyPart(attachmentBodyPart);
                }
    
                // 将multipart对象放到message中
                message.setContent(multipart);
                // 保存邮件
                message.saveChanges();
    
                transport = session.getTransport("smtp");
                // smtp验证,就是你用来发邮件的邮箱用户名密码
                transport.connect(mailHost, sender_username, sender_password);
                // 发送
                transport.sendMessage(message, message.getAllRecipients());
    
                //System.out.println("send success!");
                status=true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (transport != null) {
                    try {
                        transport.close();
                    } catch (MessagingException e) {
                        e.printStackTrace();
                    }
                }
            }
            return status;
        }
    
        public static void main(String[] args) {
            String mailHost="tmu-econ.mail.allianz";
            String senderUsername="it.support@allianz-assistance.com.cn";
            MailUtil se = new MailUtil(false,mailHost,senderUsername);
            File affix = new File("D:\Desktop\EL_CHECK_ACCOUNT_0000000006_20210520_0001.txt");
            boolean status = se.doSendEmail("邮件主题12138", "邮件内容12138", "external.y.c@xxx.com;12138@qq.com", affix);//
            System.out.println(status);
        }
    }
    暂时就这么多,有什么不同见解欢迎大家前来讨论~~951456359
      

  • 相关阅读:
    SQL Server-基础-经典SQL语句
    《程序是给自己看的还是给别人看的》
    中文写程序,何陋之有?
    ASP.NET 使用Ajax
    验证码帮助类
    js函数的四种调用方式以及对应的this指向
    C#相等性比较(转)
    HashTable、HashSet和Dictionary的区别
    MD5加密方法
    VS2015 & ReSharper 快捷键设置
  • 原文地址:https://www.cnblogs.com/yangchengdebokeyuan/p/14812179.html
Copyright © 2011-2022 走看看