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

Azura ·
更新时间:2024-11-13
· 687 次阅读

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

1.SMTP协议 2.POP3协议 3.邮件的心路历程 4.QQ邮箱和网易邮箱的配置 5.代码 6.常见错误

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

还是老规矩,定义走起。

一、SMTP协议

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

二、POP3协议

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

三、发送邮件的心路历程

①、用户A的电子邮箱为:xx@qq.com,通过邮件客户端软件写好一封邮件,交到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 = "xxxxxxx@qq.com"; // 发件人电子邮箱,改成自己需要的 String from = "xxxxxxxxx@qq.com"; // 指定发送邮件的主机为 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("xxxxxx@qq.com", "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)
作者:时空摆渡者



用java JAVA 邮件

需要 登录 后方可回复, 如果你还没有账号请 注册新账号