使用smtp协议发送邮件

本文详细介绍了如何使用Java编程语言通过SMTP协议发送电子邮件,包括配置SMTP服务器信息、设置邮件内容和附件等步骤。
 /**
     * 创建邮件
     *
     * @param session            Session用于收集JavaMail运行过程中的环境信息
     * @param myEmailAccount     发件人
     * @param receiveMailAccount 收件人
     * @param msgModelEo         模板
     * @param plcMainVo          保单信息
     * @return
     */
    private MimeMessage createMimeMessage(Session session, String myEmailAccount, String receiveMailAccount, SflMsgModel msgModelEo, PlcMainVo plcMainVo) {
        MimeMessage message = new MimeMessage(session);
        try {
            logger.info("发件邮箱为:" + myEmailAccount);
            //发件人邮箱,发件人名称
            //TODO 发送者的邮箱名可替换
            message.setFrom(new InternetAddress(myEmailAccount, "发送者的邮箱名"));
            //收件人,收件人邮箱,收件人名称
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount));
            //发件主题
            logger.info("邮件主题为:" + msgModelEo.getEmailSubject());
            message.setSubject(msgModelEo.getEmailSubject(), "UTF-8");
            String content = RenderString.renderString(msgModelEo.getMsgModelContent(), plcMainVo);
            //            Map<List<String>, Map<String, List<String>>> imgInfo = getBytes(content);
            //            Set<List<String>> bytes = imgInfo.keySet();
            //                 图片转换为字节数组后加密的list
            //            List<String> imgBytes = bytes.stream().findFirst().orElse(null);
            //            //要截取的内容以及图片名称
            //            Map<String, List<String>> imgInfos = imgInfo.get(imgBytes);
            //            Set<String> replaceString = imgInfos.keySet();
            //            //要从内容中剔除的内容
            //            String replaceStrings = replaceString.stream().findFirst().orElse(null);
            //            //图片名称
            //            List<String> imgNames = imgInfos.get(replaceStrings);
            //            // 设置消息体
            //            Multipart multipart = new MimeMultipart();
            //            BodyPart bodyPart = new MimeBodyPart();
            //
            //            // 邮件信息内容
            //            bodyPart.setText(replaceStrings);
            //            multipart.addBodyPart(bodyPart);
            //            if (CollectionUtils.isNotEmpty(imgBytes)&&CollectionUtils.isNotEmpty(imgNames)&&imgBytes.size()==imgNames.size()){
            //                for (int i = 0; i < imgBytes.size(); i++) {
            //                    bodyPart = new MimeBodyPart();
            //                    String imgName = imgNames.get(i);
            //                    String[] split = imgName.split(".");
            //                    String type=split[1];
            //                    String contentType="application/"+type;
            //                    DataSource source = new ByteArrayDataSource(Base64.getDecoder().decode(imgBytes.get(i)), contentType);
            //                    bodyPart.setDataHandler(new DataHandler(source));
            //                    bodyPart.setFileName(MimeUtility.encodeText(imgName));
            //                    multipart.addBodyPart(bodyPart);
            //                }
            //            }
            //字符串替换
            logger.info("邮件内容为:" + content);
            //邮件内容
            message.setContent(content, "text/html;charset=UTF-8");
            // 邮件发送时间
            message.setSentDate(new Date());
            message.saveChanges();


        } catch (MessagingException e) {
            logger.error("邮件赛值错误", e);
        } catch (UnsupportedEncodingException e) {
            logger.error("收件人/发件人地址错误", e);
        }
        return message;

    }

发送邮件

Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.smtp.host", host); //发件人的邮箱的 SMTP 服务器地址
        //        props.setProperty("mail.smtp.auth", "false"); // 需要请求认证
        //        props.put("mail.smtp.ssl.enable", true);//是否需要加密
        props.setProperty("mail.smtp.port", "25");
        Session session = Session.getInstance(props);
        session.setDebug(true);

        String receiveMailAccount = plcMainVo.getReceiveMailAccount();
        logger.info("邮箱收件人为" + receiveMailAccount);
        if (null == receiveMailAccount) {
            sendResult.setCode("000");
            sendResult.setMsg("邮箱收件人为空");
            return sendResult;
        } else if (null == sflMsgModel.getEmailSubject()) {
            sendResult.setCode("000");
            sendResult.setMsg("邮件主题为空");
            return sendResult;
        }
        //获取到邮件
        MimeMessage message = createMimeMessage(session, username, plcMainVo.getReceiveMailAccount(), sflMsgModel, plcMainVo);

        try {
            Transport transport = session.getTransport();
            transport.connect(username, password);
            transport.sendMessage(message, message.getAllRecipients());
            sendResult.setCode("999");
            sendResult.setMsg("邮件发送成功");
            transport.close();

        } catch (NoSuchProviderException e) {
            logger.error("发送邮件出错", e);
            sendResult.setMsg("发送邮件出错");
            sendResult.setCode("999");

        } catch (MessagingException e) {
            sendResult.setMsg("发送邮件出错");
            sendResult.setCode("999");
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值