• 【Java】-【使用smtp协议发邮件】


    目前163和qq邮箱支持SMTP协议,本文以qq邮箱为例,163邮箱和这个思路一样
    场景:使用qq邮箱给xx邮箱发一条邮件,那么你一定要获得qq邮箱的授权码,在设置-账户里找到以下内容,开启服务获得授权码,如果你已经开启了,那么点击生成授权码获得授权码:
    在这里插入图片描述
    POM.xml中导入以下依赖:

    	<dependencies>
            <dependency>
                <groupId>org.apache.xbean</groupId>
                <artifactId>xbean-spring</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.4.5</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>RELEASE</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在classpath路径下(我是src/main/resources)新建mail.properties配置文件,配置内容如下:

    email.host=smtp.qq.com
    email.port=465
    email.from=809476070@qq.com
    username=809476070@qq.com
    password=授权码
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:

    1. email.host为服务器域名,不要加http/https,163邮箱默认为smtp.163.com
    2. email.port为端口号,配置465或587,25已经弃用了
    3. email.from发件人邮箱地址
    4. username发件人用户名
    5. password授权码,不是邮箱密码

    核心代码:

    import javax.mail.*;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    import java.util.ResourceBundle;
    
    public class EmailHelper {
        private static final ResourceBundle bundle = ResourceBundle.getBundle("mail");
        private static final String sendFrom = bundle.getString("email.from");
        private static final String username = bundle.getString("username");
        private static final String password = bundle.getString("password");
        private static final String host = bundle.getString("email.host");
    
        public static void sendEmail(String someone, String subject, String content){
            Properties props = new Properties();
            props.setProperty("mail.host", host);
            props.setProperty("mail.smtp.auth", "true");
    
            Authenticator authenticator = new Authenticator(){
                @Override
                public javax.mail.PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username,password);
                }
            };
            Session session = Session.getDefaultInstance(props, authenticator);
            session.setDebug(true);
            Message message = new MimeMessage(session);
            try {
                message.setFrom(new InternetAddress(sendFrom));
                message.setRecipients(MimeMessage.RecipientType.TO,InternetAddress.parse(someone));
                //message.setRecipients(RecipientType.TO,InternetAddress.parse("测试的接收的邮件多个以逗号隔开"));
                try {
                    message.setSubject(subject);
                    message.setContent(content,"text/html;charset=UTF-8");
                    Transport.send(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (AddressException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    测试代码:

    import org.junit.Test;
    public class test {
        @Test
        public  void  tsetemail(){
            String content ="Hello,This is a test email!!!!";
            //参数分别为接收者邮箱、title、内容body
            EmailHelper.sendEmail("809476070@zjtlcb.com", "标题", content);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Rockland丨Rockland HCP抗体开发流程
    微服务分布式开源架构是什么?
    每日一题(11、16)
    管理会计习题集及答案 1-4章
    中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结
    搞定面试官 - MySQL 中你知道如何计算一个索引的长度嘛?
    一文搞定MySQL的分区技术、NoSQL、NewSQL、基于MySQL的分表分库
    不同linux 比较
    c++学习记录(一)
    2023上海国际电力电工展盛大举行 规模创新高 与行业「升级、转型、融合」
  • 原文地址:https://blog.csdn.net/CaraYQ/article/details/125624595