栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

spring boot通过代理发送邮件

Java 更新时间:发布时间: 百科书网 趣学号

1.测试类

 
public class DarkNetworkDataMonitorApplicationTest {

    @Autowired
    private SendSimpleMailUtils sendSimpleMailUtils;
    @Test
    public void CeEmail() throws GeneralSecurityException, MessagingException {
        sendSimpleMailUtils.sendEmail("预警","浴巾高效",new Address[]{new          InternetAddress("12222230@qq.com")});
    }
}

2.执行发送邮件的类

@Service
@Slf4j
public class SendSimpleMailUtils {

    //代理服务器地址
    @Value("${spring.mail.proxyhost}")
    private String proxyHost;
    
    //代理服务器端口
    @Value("${spring.mail.proxyport}")
    private String proxyPort;

    //email地址
    @Value("${spring.mail.host}")
    private String host;

    //协议
    @Value("${spring.mail.protocol}")
    private String protocol;

    //邮箱用户名
    @Value("${spring.mail.username}")
    private String username;

    //邮箱密码
    @Value("${spring.mail.password}")
    private String password;

    //@Async("doSomethingExecutor")  这个注解是通过异步多线程方式执行,在另一篇文章会讲解SpringBoot中如何使用异步多线程
    public void sendEmail(String title,String sendMessage,Address[] addrs)throws MessagingException, GeneralSecurityException {
        log.info("发送邮箱,{}",addrs);
        //设置代理服务器
        Properties props = System.getProperties();
        props.setProperty("proxySet", "true");
        props.setProperty("socksProxyHost", proxyHost);
        props.setProperty("socksProxyPort", proxyPort);
        props.setProperty("mail.smtp.host", host);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "false");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", host);
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", protocol);

        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);
        Session session = Session.getInstance(props);

        Message message = new MimeMessage(session);
        Address address = new InternetAddress(username);

        message.setFrom(address);
        message.setSubject(title);
        message.setText(sendMessage);
        message.setSentDate(new Date());

        Transport transport = session.getTransport();
        //邮件服务器、发送邮箱账号、第三方验证码
        transport.connect(host, username, password);

        //执行发送邮件
        transport.sendMessage(message,addrs);

        //发送完需要清楚代理,否则会导致系统链接mysql 、 redis等服务链接失败
        System.clearProperty("proxySet");
        System.clearProperty("socksProxyHost");
        System.clearProperty("socksProxyPort");
        transport.close();
    }
}

注意:我在写的时候出现发送邮件成功后redis、mysql过一段时间后就链接失败,经过分析得知是因为设置代理是全局生效的,当redis、mysql的连接池里的链接失效后再使用的时候需要重新链接的时候发现是代理服务器,然后连接不到目标。所以再发送邮件成功后需要使用以下代码清除代理

        System.clearProperty("proxySet");
        System.clearProperty("socksProxyHost");
        System.clearProperty("socksProxyPort");

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/273063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号