• springboot发送邮件


    1.控制层

    @PostMapping("/sendEmail2")
    @ApiOperation(value = "发送邮件")
    public String sendEmail2(@RequestBody JSONObject json) {
    
    
        Email email = JSON.toJavaObject(json, Email.class);
    
        try {
            boolean result = emailService.sendEmail(email);//响应结果
        }
        catch (Exception e){
            e.printStackTrace();
        }
    
        return "Email sent successfully!";
    }
    

    2.业务层

    @Override
    public Boolean sendEmail(Email email) {
    
        boolean result=false;
        try {
            List oldAttachments=email.getAttachments();
            Map map=new HashMap<>();
            List attachments=new ArrayList<>();
            // 转换附件路径
            for(String  path:oldAttachments){
                String templeFilePath=download(path,map);
                attachments.add(templeFilePath);
            }
    
            //发送方法
            ExchangeClient client = new ExchangeClient.ExchangeClientBuilder()
                    .hostname(hostname)
                    .username(username)
                    .password(password)
                    .recipientTo(email.getRecipientTo())
                    .recipientCc(email.getRecipientCc())
                    .recipientBcc(email.getRecipientBcc())
                    .subject(email.getSubject())
                    .message(email.getMessage())
                    .attachments(attachments)
                    .build();
            result = client.sendExchange();//响应结果
        }catch (Exception e){
            log.error("发送邮件失败:"+e.getMessage());
        }
        return result;
    }

    3.工具类

    package com.asset.util;/**
     * Created by admin on 2020/10/13.
     */
    
    import com.asset.common.utils.EmptyUtil;
    import microsoft.exchange.webservices.data.core.ExchangeService;
    import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
    import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
    import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
    import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
    import microsoft.exchange.webservices.data.credential.WebCredentials;
    import microsoft.exchange.webservices.data.property.complex.MessageBody;
    import net.bytebuddy.description.type.TypeList;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * @Description 企业邮箱
     * @Author wyj
     * @Date 2020/10/13 17:55
     */
    public class ExchangeClient {
        private static final Logger logger = LoggerFactory.getLogger(ExchangeClient.class);
    
        private final String hostname;
        private final ExchangeVersion exchangeVersion;
        private final String domain;
        private final String username;
        private final String password;
        private final String subject;
        private final List recipientTo;
        private final List recipientCc;
        private final List recipientBcc;
        private final List attachments;
        private final String message;
    
        private ExchangeClient(ExchangeClientBuilder builder) {
            this.hostname = builder.hostname;
            this.exchangeVersion = builder.exchangeVersion;
            this.domain = builder.domain;
            this.username = builder.username;
            this.password = builder.password;
            this.subject = builder.subject;
            this.recipientTo = builder.recipientTo;
            this.recipientCc = builder.recipientCc;
            this.recipientBcc = builder.recipientBcc;
            this.attachments = builder.attachments;
            this.message = builder.message;
        }
    
        public static class ExchangeClientBuilder {
    
            private String hostname;
            private ExchangeVersion exchangeVersion = ExchangeVersion.Exchange2010;
            private String domain;
            private String username;
            private String password;
            private String subject;
            private List recipientTo;
            private List recipientCc;
            private List recipientBcc;
            private List attachments;
            private String message;
    
            public ExchangeClientBuilder() {
                this.exchangeVersion = ExchangeVersion.Exchange2010_SP1;
                this.hostname = "";
                this.username = "";
                this.password = "";
                this.subject = "";
                this.recipientTo = new ArrayList<>(0);
                this.recipientCc = new ArrayList<>(0);
                this.recipientBcc = new ArrayList<>(0);
                this.attachments = new ArrayList<>(0);
                this.message = "";
            }
    
            /**
             * The hostname of the Exchange Web Service. It will be used for
             * connecting with URI https://hostname/ews/exchange.asmx
             *
             * @param hostname the hostname of the MS Exchange Smtp Server.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder hostname(String hostname) {
                this.hostname = hostname;
                return this;
            }
    
            /**
             * The Exchange Web Server version.
             *
             * @param exchangeVersion the Exchange Web Server version.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder exchangeVersion(ExchangeVersion exchangeVersion) {
                this.exchangeVersion = exchangeVersion;
                return this;
            }
    
            /**
             * The domain of the MS Exchange Smtp Server.
             *
             * @param domain the domain of the Active Directory. The first part of
             *               the username. For example: MYDOMAIN\\username, set the MYDOMAIN.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder domain(String domain) {
                this.domain = domain;
                return this;
            }
    
            /**
             * The username of the MS Exchange Smtp Server. The second part of the
             * username. For example: MYDOMAIN\\username, set the username.
             *
             * @param username the username of the MS Exchange Smtp Server.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder username(String username) {
                this.username = username;
                return this;
            }
    
            /**
             * The password of the MS Exchange Smtp Server.
             *
             * @param password the password of the MS Exchange Smtp Server.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder password(String password) {
                this.password = password;
                return this;
            }
    
            /**
             * The subject for this send.
             *
             * @param subject the subject for this send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder subject(String subject) {
                this.subject = subject;
                return this;
            }
    
            /**
             * You can specify a list with email addresses that will be used as cc
             * for this email send.
             *
             * @param recipientTo the list with email addresses that will be used as
             *                    cc for this email send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder recipientTo(List recipientTo) {
                this.recipientTo = recipientTo;
                return this;
            }
    
            /**
             * You can specify one or more email address that will be used as cc
             * recipients.
             *
             * @param recipientCc  the first cc email address.
             * @param recipientsCc the other cc email address for this send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder recipientCc(String recipientCc, String... recipientsCc) {
                // Prepare the list.
                List recipients = new ArrayList<>(1 + recipientsCc.length);
                recipients.add(recipientCc);
                recipients.addAll(Arrays.asList(recipientsCc));
                // Set the list.
                this.recipientCc = recipients;
                return this;
            }
    
            /**
             * You can specify a list with email addresses that will be used as cc
             * for this email send.
             *
             * @param recipientCc the list with email addresses that will be used as
             *                    cc for this email send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder recipientCc(List recipientCc) {
                this.recipientCc = recipientCc;
                return this;
            }
    
            /**
             * You can specify one or more email address that will be used as bcc
             * recipients.
             *
             * @param recipientBcc  the first bcc email address.
             * @param recipientsBcc the other bcc email address for this send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder recipientBcc(String recipientBcc, String... recipientsBcc) {
                // Prepare the list.
                List recipients = new ArrayList<>(1 + recipientsBcc.length);
                recipients.add(recipientBcc);
                recipients.addAll(Arrays.asList(recipientsBcc));
                // Set the list.
                this.recipientBcc = recipients;
                return this;
            }
    
            /**
             * You can specify a list with email addresses that will be used as bcc
             * for this email send.
             *
             * @param recipientBcc the list with email addresses that will be used
             *                     as bcc for this email send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder recipientBcc(List recipientBcc) {
                this.recipientBcc = recipientBcc;
                return this;
            }
    
            /**
             * You can specify one or more email address that will be used as cc
             * recipients.
             *
             * @param attachment  the first attachment.
             * @param attachments the other attachments for this send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder attachments(String attachment, String... attachments) {
                // Prepare the list.
                List attachmentsToUse = new ArrayList<>(1 + attachments.length);
                attachmentsToUse.add(attachment);
                attachmentsToUse.addAll(Arrays.asList(attachments));
                // Set the list.
                this.attachments = attachmentsToUse;
                return this;
            }
    
            /**
             * You can specify a list with email attachments that will be used for
             * this email send.
             *
             * @param attachments the list with email attachments that will be used
             *                    for this email send.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder attachments(List attachments) {
                this.attachments = attachments;
                return this;
            }
    
            /**
             * The body of the email message.
             *
             * @param message the body of the email message.
             * @return the builder for chain usage.
             */
            public ExchangeClientBuilder message(String message) {
                this.message = message;
                return this;
            }
    
            /**
             * Build a mail.
             *
             * @return an EmailApacheUtils object.
             */
            public ExchangeClient build() {
                return new ExchangeClient(this);
            }
        }
    
        public boolean sendExchange() {
            // The Exchange Server Version.
            ExchangeService exchangeService = new ExchangeService(exchangeVersion);
    
            // Credentials to sign in the MS Exchange Server.
            ExchangeCredentials exchangeCredentials = new WebCredentials(username, password, domain);
            exchangeService.setCredentials(exchangeCredentials);
    
            // URL of exchange web service for the mailbox.
            try {
                exchangeService.setUrl(new URI("https://" + hostname + "/ews/Exchange.asmx"));
            } catch (URISyntaxException ex) {
                logger.info("An exception occurred while creating the uri for exchange service.", ex);
                return false;
            }
    
            // The email.
            EmailMessage emailMessage;
            try {
                emailMessage = new EmailMessage(exchangeService);
                emailMessage.setSubject(subject);
                emailMessage.setBody(MessageBody.getMessageBodyFromText(message));
            } catch (Exception ex) {
                logger.info("An exception occurred while setting the email message.", ex);
                return false;
            }
    
            // TO recipient.
            for (String recipient : recipientTo) {
                try {
    //                if(StringUtil.isEmpty(recipient)){
    //                    continue;
    //                }
                    emailMessage.getToRecipients().add(recipient);
                } catch (ServiceLocalException ex) {
                    logger.info("An exception occurred while sstting the TO recipient(" + recipient + ").", ex);
                    return false;
                }
            }
    
            // CC recipient.
            for (String recipient : recipientCc) {
                try {
                    if (EmptyUtil.isEmpty(recipient)) {
                        continue;
                    }
                    emailMessage.getCcRecipients().add(recipient);
                } catch (ServiceLocalException ex) {
                    logger.info("An exception occurred while sstting the CC recipient(" + recipient + ").", ex);
                    return false;
                }
            }
    
            // BCC recipient
            for (String recipient : recipientBcc) {
                try {
                    if (EmptyUtil.isEmpty(recipient)) {
                        continue;
                    }
                    emailMessage.getBccRecipients().add(recipient);
                } catch (ServiceLocalException ex) {
                    logger.info("An exception occurred while sstting the BCC recipient(" + recipient + ").", ex);
                    return false;
                }
            }
    
            // Attachements.
            for (String attachmentPath : attachments) {
                try {
                    emailMessage.getAttachments().addFileAttachment(attachmentPath);
                } catch (ServiceLocalException ex) {
                    logger.info("An exception occurred while setting the attachment.", ex);
                    return false;
                }
            }
    
            try {
                emailMessage.send();
                logger.info("An email is send.");
            } catch (Exception ex) {
                logger.info("An exception occurred while sending an email.", ex);
                return false;
            }
    
            return true;
        }
    
    }
    

    4.依赖

    
        com.microsoft.ews-java-api
        ews-java-api
        2.0
    

    5.postmain的json

    {

        "recipientTo":["wangyijun0510@163.com","wangyijun0510@outlook.com"],

        "recipientCc":["wangyijun0511@outlook.com"],

        "subject":"wyj test mult man",

        "message":"wyj content2",

        "attachments":["http://10.101.8.48:50001/law/user1_NAVICAT%E6%8E%88%E6%9D%83%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C_1695781087467.pdf"]

    }

  • 相关阅读:
    博弈论学习笔记【未完】
    Java - 缓冲输入输出流 (BufferedInputStream、BufferedOutputStream)
    openGauss/MogDB脚本源码浅析(2)—— gs_install_plugin/gs_install_plugin_local
    LeetCode-109. Convert Sorted List to Binary Search Tree [C++][Java]
    聊天软件项目开发2
    Microsoft Azure & NVIDIA IoT 开发者季 I|Azure IoT & NVIDIA Jetson 开发基础
    掌握系统性思维
    hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行
    使用 PMML 实现模型融合及优化技巧
    Anaconda成功安装之后没有在菜单列和桌面显示图标
  • 原文地址:https://blog.csdn.net/wangyijun1/article/details/133850741