给心爱的她(他)用java发送一封邮件吧

关与作者更多博客请访问云里云外开源社区
请坐.JPG


随着我们学习java的深入,也渐渐发现了它的一些乐趣,比如发送邮件…(还有很多啊)
图片.png

还是老规矩,定义走起。

一、SMTP协议

SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组从原地址到目的地址传输邮件的规范,通过此来控制邮件的中转方式,用女朋友能听懂的话说就是帮助告诉邮件该去哪!而SMTP服务器就是遵循SMTP协议的发送邮件服务器。对云服务器大家或多或少都了解,可以把邮件服务器也理解成一种云服务器。

二、POP3协议

POP3是Post Office Protocol 3的简称,即邮局协议的第三个版本,规定了怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。而POP3服务器则是遵循POP3协议的接受邮件服务器。简单说就是接受邮件的。


三、发送邮件的心路历程

①、用户A的电子邮箱为:[email protected],通过邮件客户端软件写好一封邮件,交到QQ的邮件服务器,这一步使用的协议是SMTP,对应图示的①;

②、QQ邮箱会根据用户A发送的邮件进行解析,也就是根据收件地址判断是否是自己管辖的账户,如果收件地址也是QQ邮箱,那么会直接存放到自己的存储空间。这里我们假设收件地址不是QQ邮箱,而是163邮箱,那么QQ邮箱就会将邮件转发到163邮箱服务器,转发使用的协议也是SMTP,对应图示的②;

③、163邮箱服务器接收到QQ邮箱转发过来的邮件,也会判断收件地址是否是自己,发现是自己的账户,那么就会将QQ邮箱转发过来的邮件存放到自己的内部存储空间,对应图示的③;

④、用户A将邮件发送了之后,就会通知用户B去指定的邮箱收取邮件。用户B会通过邮件客户端软件先向163邮箱服务器请求,要求收取自己的邮件,对应图示的④;

⑤、163邮箱服务器收到用户B的请求后,会从自己的存储空间中取出B未收取的邮件,对应图示⑤;

⑥、163邮箱服务器取出用户B未收取的邮件后,将邮件发给用户B,对应图示的⑥;最后三步用户B收取邮件的过程,使用的协议是POP3;

总结一下

使用SMTP(简单邮件传送协议)或ESMTP(扩展SMTP)来发送电子邮件,使用POP3(电子邮局协议3)或IMAP(因特网消息访问协议)来接收电子邮件。

邮件收发原理.png


四、 QQ邮箱和网易邮箱的配置

1、qq

在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务
qq邮箱配置.png

img


2、网易

请登录163邮箱,点击页面正上方的“设置”,再点击左侧上“POP3/SMTP/IMAP”,其中“开启SMTP服务”是系统默认勾选开启的。勾选图中另两个选项,点击确定,即可开启成功。不勾选图中两个选项,点击确定,可关闭成功。

什么是POP3、SMTP和IMAP?

五、代码演示(QQ邮箱)

现在随着代码来了解发送邮件吧!

public static void main(String [] args) throws GeneralSecurityException {
        // 收件人电子邮箱,改成自己需要的
        String to = "[email protected]";

        // 发件人电子邮箱,改成自己需要的
        String from = "[email protected]";

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.qq.com";  //QQ 邮件服务器

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            @Override
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("[email protected]", "16位验证码在邮箱中获取"); //发件人邮件用户名、密码,密码从对应的邮箱中获取
            }
        });

        try{
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

            // Set Subject: 头部头字段
            message.setSubject("This is the Subject Line!");

            // 设置消息体
            message.setText("萌新你好  这里是太原理工大学云顶书院第四期java一组,李国瑞正在通过java发送邮件与您交流!");

            // 发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....from runoob.com");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

六、常见错误种类

这里附上大神的博文,大家如有需要自行参考,但愿你们用不上 [发送邮件常见错误](https://blog.csdn.net/afei3418/article/details/50535047)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章