邮件传输的原理分析
做一个东西一定要分析原理,建立架构,再编写代码
在网络上实现邮件传输需要邮件服务器
假设有两个人,张三李四,他们有两台不一样的电脑,张三想给李四发一封邮件
中间有一个基站来帮助他们通信,通过网络传输
他们有两个真实的邮箱,不同的邮箱有自己的服务器
基站先把张三发出的邮件存到网易服务器里,服务器通过基站找到qq的服务器,放入
李四通过电脑访问qq服务器,从中取出信件
发送邮件:SMTP协议
接收邮件:POP3协议
服务器内部有一个POP3接收,还有一个SMTP发送,下面还有一个文件系统FileSystem,每个账户有一定的空间
注册一个账号相当于在文件系统中申请一个地址
JAVA实现过程
使用Java发送E-mail十分简单,但是首先你应该准备JavaMail API和Java Activation Framework
得到两个jar包
- mail.jar
- activation.jar
MainlDemo01
package com.lding;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;
/**
* @program: FileTransport
* @description:
* @author: 王丁
* @date: 2021-11-13 10:41
**/
public class MailDemo01 {
public static void main(String[] args) throws GeneralSecurityException, MessagingException {
Properties prop=new Properties();
prop.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器
prop.setProperty("mail.transport.protocol","smtp");//邮箱发送协议
prop.setProperty("mail.smtp.auth","true");//需要验证用户名密码
//关于qq邮箱,还要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf=new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
// prop.put("mail.smtp.ssl.enable","true");
//prop.put("mail.smtp.ssl.socketFactory",sf);
//使用JavaMail发送邮件的5个步骤
//1、创建定义整个应用程序所需的环境信息的Session对象
//QQ才有!其他邮箱不用
Session session= Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("邮箱","验证码");
}
});
session.setDebug(true);
//2、通过session得到transport对象
Transport ts=session.getTransport();
//3、使用邮箱的用户名和授权码连上邮件服务器
ts.connect("smtp.qq.com","邮箱","验证码");
//4、创建邮件:写邮件
//注意需要传递Session
MimeMessage message=new MimeMessage(session);
//指明邮件的发件人
message.setFrom(new InternetAddress("邮箱"));
//指明邮件的发件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO,new InternetAddress("邮箱"));
//邮件的标题
message.setSubject("你好世界!");
//邮件的文本内容
message.setContent("<h1 style='color:red'>你好啊!</h1>","text/html;charset=UTF-8");
//5、发送邮件
ts.sendMessage(message,message.getAllRecipients());
//6.关闭连接
ts.close();
}
}
运行结果
实现之前我们还需要开启qq邮箱的POP3/SMTP服务才可以实现