1. 查看Outlook的“SMTP”配置

     获取SMTP的设置

    服务器名称: smtp.partner.outlook.cn
    端口: 587

      1. 代码
        实现类
        @Override @Transactional(rollbackFor
        = Exception.class) public BaseVo<Object> saleEmail(SaleSendEmailVO vo) throws Exception { SaleSendEmailTemplate selectOne = templateService.getOne(new LambdaQueryWrapper<SaleSendEmailTemplate>().eq(SaleSendEmailTemplate::getIsDeleted, Const.IS_DEL) .eq(SaleSendEmailTemplate::getProductName, vo.getProductName()) .eq(SaleSendEmailTemplate::getSaleStep, vo.getSaleStep())); if (selectOne == null) { return BaseVo.error("邮件模板选择为空"); } String userName = commonService.getCurrentLoginUserName(); SysUser sysUser = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getDelFlag, Const.IS_DEL).eq(SysUser::getUsername, userName)); if (sysUser == null || StringUtils.isEmpty(sysUser.getEmail()) || StringUtils.isEmpty(sysUser.getEmailPwd())) { throw new RuntimeException("销售人员信息或者邮件地址为空,请核实!"); } MailSenderInfo mailSenderInfo = new MailSenderInfo(); // 设置邮件内容 StringBuilder mailContent = new StringBuilder(); mailContent.append(vo.getEmailContent().toString()).append("<br/>"); // 设置附件 if (CollectionUtils.isNotEmpty(vo.getFileList())) { for (SaleSendAttachVO attachVO : vo.getFileList()) { mailContent.append("附件链接为:").append("<a href=").append(attachVO.getFilePath()).append(">").append(attachVO.getFileName()).append("</a>").append("<br/>"); } } mailContent.append("<br/>").append("<br/>") .append("<img src=").append("图片地址").append(" style=\"width: 20%\" >").append("<br/>") .append("M:").append(sysUser.getEmail()).append("<br/>") .append("T:").append(sysUser.getPhone()).append("<br/>") .append("A:").append("上海市XXXXX").append("<br/>") .append("<img src=").append("图片地址").append(" style=\"width: 20%\" >"); String content = mailContent.toString(); mailSenderInfo.setContent(content); vo.setEmailContent(content); mailSenderInfo.setMailServerHost(Const.MAIL_SERVER_HOST); // 开始验证 mailSenderInfo.setValidate(true); // 设置发送邮箱
         mailSenderInfo.setFromAddress(sysUser.getEmail());//发件人
                mailSenderInfo.setSubject(vo.getEmailSubject());//邮件主题/标题
                mailSenderInfo.setToAddress(vo.getAccepter());//收件人
                mailSenderInfo.setCcAddress(vo.getCopyAccepter());//抄送人
                mailSenderInfo.setUserName(sysUser.getEmail());//发件人名称,是邮件名称
                mailSenderInfo.setPassword(sysUser.getEmailPwd());//Outlook的密码
                // 发送邮件的工具类
                MailSender.sendHtmlMail(mailSenderInfo);
        
                SaleSendEmail entity = new SaleSendEmail();
                BeanUtils.copyProperties(vo, entity);
                entity.setSalerEmail(sysUser.getEmail());
                entity.setSaler(sysUser.getUsername());
                entity.setSalerId(sysUser.getId().toString());
                entity.setEmailTemplateId(selectOne.getId().toString());
                entity.setCreateBy(userName);
                entity.setCreateDt(new Date());
                this.save(entity);
                return BaseVo.ok();
            }
        类:
        MailSender
        public static boolean sendHtmlMail(MailSenderInfo mailInfo)
                    throws Exception {
                // 判断是否需要身份认证
                MyAuthenticator authenticator = null;
                Properties pro = mailInfo.getProperties();
                pro.put("mail.smtp.host", Const.MAIL_SERVER_HOST);
                pro.put("mail.smtp.port", "587");
                pro.put("mail.smtp.auth", "true");
                pro.put("mail.smtp.starttls.enable", "true");
                // 如果需要身份认证,则创建一个密码验证器
                if (mailInfo.isValidate()) {
                    authenticator = new MyAuthenticator(mailInfo.getUserName(),
                            mailInfo.getPassword());
                }
                // 根据邮件会话属性和密码验证器构造一个发送邮件的session
                Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
                // 根据session创建一个邮件消息
                Message mailMessage = new MimeMessage(sendMailSession);
                // 创建邮件发送者地址
                Address from = new InternetAddress(mailInfo.getFromAddress());
                // 设置邮件消息的发送者
                mailMessage.setFrom(from);
        
                String toAddress = mailInfo.getToAddress();
                String bccAddress = mailInfo.getBccAddress();
                String ccAddress = mailInfo.getCcAddress();
        
                String[] arr = null;
                int receiverCount;
                if (null != toAddress && !"".equals(toAddress.trim())) {
                    arr = toAddress.split(";");// 解析主送邮箱地址字符串,多个邮箱地址用","分隔
                    receiverCount = arr.length;
                    InternetAddress[] address = new InternetAddress[receiverCount];
                    for (int i = 0; i < receiverCount; i++) {
                        address[i] = new InternetAddress(arr[i]);
                    }
                    mailMessage.addRecipients(Message.RecipientType.TO, address);
                }
        
                if (null != bccAddress && !"".equals(bccAddress.trim())) {
                    arr = bccAddress.split(";");// 解析暗送邮箱地址字符串,多个邮箱地址用","分隔
                    receiverCount = arr.length;
                    InternetAddress[] address = new InternetAddress[receiverCount];
                    for (int i = 0; i < receiverCount; i++) {
                        address[i] = new InternetAddress(arr[i]);
                    }
                    mailMessage.addRecipients(Message.RecipientType.BCC, address);
                }
        
                if (null != ccAddress && !"".equals(ccAddress.trim())) {
                    arr = ccAddress.split(";");// 解析抄送邮箱地址字符串,多个邮箱地址用","分隔
                    receiverCount = arr.length;
                    InternetAddress[] address = new InternetAddress[receiverCount];
                    for (int i = 0; i < receiverCount; i++) {
                        address[i] = new InternetAddress(arr[i]);
                    }
                    mailMessage.addRecipients(Message.RecipientType.CC, address);
                }
        
        
                // 设置邮件消息的主题
                mailMessage.setSubject(mailInfo.getSubject());
                // 设置邮件消息发送的时间
                mailMessage.setSentDate(new Date());
                // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
                Multipart mainPart = new MimeMultipart();
                // 创建一个包含HTML内容的MimeBodyPart
                BodyPart html = new MimeBodyPart();
                // 设置HTML内容
                html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
                mainPart.addBodyPart(html);
                // 将MiniMultipart对象设置为邮件内容
                mailMessage.setContent(mainPart);
        
                if (null != mailInfo.getAttachFileNames()) {
                    for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {
                        if (StringUtils.isNotBlank(mailInfo.getAttachFileNames()[i])) {
                            // 建立第二部分:附件
                            html = new MimeBodyPart();
                            // 获得附件
                            DataSource source = new FileDataSource(mailInfo.getAttachFileNames()[i]);
                            //设置附件的数据处理器
                            html.setDataHandler(new DataHandler(source));
                            // 设置附件文件名
                            int index = mailInfo.getAttachFileNames()[i].lastIndexOf("/");
                            String fileName = mailInfo.getAttachFileNames()[i].substring(index + 1);
                            html.setFileName(MimeUtility.encodeText(fileName));
                            // 加入第二部分
                            mainPart.addBodyPart(html);
                        }
                    }
                }
                // 发送邮件
                Transport.send(mailMessage);
                return true;
            }

         

posted on 2023-05-30 16:44  学习者&#128218;&#128583;  阅读(217)  评论(0)    收藏  举报