JavaWeb知识小汇(13)—— 邮件发送原理及实现

文章目录

邮件发送原理及实现

电子邮件

要在网络上实现邮件功能,必须要有专门的邮件服务器

这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到接收者的电子邮件中

SMTP服务器地址:一般是smtp.xxx.com,比如163邮箱是:smtp.163.com

电子邮箱的获得需要在邮件服务器上进行申请。比如qq邮箱,需要开通qq邮箱功能

传输协议

SMTP协议:

发送邮件,我们通常把处理用户smtp请求的服务器称之为SMTP服务器

POP3协议:

接收邮件,我们通常把处理用户pop3请求的服务器称之为POP3服务器

需要的jar包

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

四个主要核心类

JavaWeb知识小汇(13)—— 邮件发送原理及实现
授权码获取

  1. 打开qq邮箱

JavaWeb知识小汇(13)—— 邮件发送原理及实现
3.
JavaWeb知识小汇(13)—— 邮件发送原理及实现

public class Mail {
    //简单邮件只有文字
    //复杂邮件文字、图片、附件
    //发送邮件需要协议的支持,开启MSTP/POP3
    //授权码ntzmvjefrpdtdfbe
    public static void main(String[] args) throws GeneralSecurityException, Exception {
        Properties properties = new Properties();
        properties.setProperty("mail.host", "smtp.qq.com");//设置qq邮件服务器
        properties.setProperty("mail.transport.protocol", "smtp");//邮件发送协议
        properties.setProperty("mail.smtp.auth", "true");//需要验证用户名和密码

        //关于qq邮箱,还要设置ssl加密,其他不需
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);

        //使用javaMail发送邮件的五个步骤
        //1.创建定义整个应用程序所需的环境信息的Session对象
        //qq才有
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //发件人邮箱用户名、授权码
                return new PasswordAuthentication("xxxxx@qq.com", "授权码");
            }
        });

        //开启session的debug模式,可以看到程序发送email的运行状态
        session.setDebug(true);
        //2.通过session得到transport对象
        Transport transport = session.getTransport();
        //3.使用邮箱的用户名和授权码连接上邮件服务器
        transport.connect("smtp.qq.com", "xxxxx@qq.com", "授权码");
        //4.创建邮件
        Message message = new MimeMessage(session);
        //发件人
        message.setFrom(new InternetAddress("xxxxx@qq.com"));
        //收件人 自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxxx@qq.com"));
        //标题
        message.setSubject("2021/01/31");
        //内容
        message.setContent("<h1 style='color:red'>1月结束了</h1>", "text/html;charset=UTF-8");
        //5.发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        //6.关闭文件
        transport.close();
    }
}
上一篇:为什么邮箱收到的邮件是乱码【解决方案】


下一篇:利用python发送qq邮件