使用 Java mail进行邮件匿名发送

起因:

需要使用 exchange自搭建的邮箱服务器,只能使用邮箱名称以及邮箱服务器ip 来发送邮件。

之前都使用163、qq等邮箱,但是这些邮箱都会强制进行验证,而且还需要使用smtp的授权码,注意是授权码,而不是邮箱密码(关于授权码可自行百度,有很多)。所以之前的逻辑并不通用。

一番查证后,匿名发送邮件可以使用 Java mail的session来进行发送,不能使用 javaMailSender来发送。下面来展示两种区别

pom

<dependency>
   <groupId>javax.mail</groupId>
   <artifactId>mail</artifactId>
   <version>1.4.7</version>
</dependency>

163等邮箱需要使用授权码

private JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
public void sendHTMLMail(MailSendVo mailSendVo) throws MessagingException {
    MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true, "UTF-8");
    mimeMessageHelper.setFrom(mailSendVo.getFrom());
    mimeMessageHelper.setTo(mailSendVo.getTo());
    mimeMessageHelper.setSubject(mailSendVo.getSubject());
    mimeMessageHelper.setText(mailSendVo.getContent(), true);
    javaMailSender.setHost(mailSendVo.getSmtpServer());
    javaMailSender.setUsername(mailSendVo.getUserName());
    javaMailSender.setPassword(mailSendVo.getPwd());
    javaMailSender.setDefaultEncoding("UTF-8");
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.connectiontimeout", "30000");
    props.put("mail.smtp.timeout", "30000");
    if (mailSendVo.getPort() != null && mailSendVo.getPort() != 0) {
        javaMailSender.setPort(mailSendVo.getPort());
        if(mailSendVo.getPort() == 465){
            props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.ssl.enable", true);
            props.put("mail.smtp.ssl.protocols", "TLSv1.2");
            props.setProperty("mail.transport.protocol", "smtp");
            props.setProperty("mail.mime.encodefilename", "true");

        }
    }
    javaMailSender.setJavaMailProperties(props);
    javaMailSender.send(mimeMailMessage);
}

 

使用exchange,匿名模式发送

public void sendHTMLMailSub(MailSendVo mailSendVo) {
        logger.info("server pwd:" + mailSendVo.getPwd());
        try {
            Properties props = new Properties();
            props.put("mail.debug", "true");
            props.put("mail.smtp.auth", "false");//不进行验证
            props.put("mail.smtp.host", mailSendVo.getSmtpServer());
            props.put("mail.transport.protocol", "smtp");
            if (mailSendVo.getPort() != null && mailSendVo.getPort() != 0) {
                if (mailSendVo.getPort() == 465) {
                    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                    props.put("mail.smtp.ssl.enable", true);
                    props.put("mail.smtp.ssl.protocols", "TLSv1.2");

                    props.put("mail.mime.encodefilename", "true");
                    props.put("mail.smtp.port", "465");
                } else {
                    props.put("mail.smtp.port", "25");
                    props.put("mail.smtp.starttls.enabled", "false");
                    props.put("mail.smtp.starttls.required", "false");
                }
            }

            logger.info("props: " + props);
            Session session = Session.getInstance(props, null); //主要是这个地方,不进行验证用户密码

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(mailSendVo.getFrom()));//发送者
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailSendVo.getTo()));//接收者
            message.setSubject(mailSendVo.getSubject());//主题
            message.setText(mailSendVo.getContent());//内容
            message.saveChanges();

            Transport.send(message);
        } catch (Exception e) {
            logger.error("send mail message failed: ", e);
        }
    }

 

主要关注 Properties props 配置,一些实体类可自行创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值