关与作者更多博客请访问云里云外开源社区
随着我们学习java的深入,也渐渐发现了它的一些乐趣,比如发送邮件…(还有很多啊)
还是老规矩,定义走起。
一、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(因特网消息访问协议)来接收电子邮件。
四、 QQ邮箱和网易邮箱的配置1、qq
在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务
2、网易
请登录163邮箱,点击页面正上方的“设置”,再点击左侧上“POP3/SMTP/IMAP”,其中“开启SMTP服务”是系统默认勾选开启的。勾选图中另两个选项,点击确定,即可开启成功。不勾选图中两个选项,点击确定,可关闭成功。
五、代码演示(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)