邮件发送
介绍
-
要在网络上实现邮件功能,必须要有专门的邮件服务器。
-
这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
-
SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。
-
电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开通邮箱功能。
传输协议
SMTP协议:发送邮件:
- 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
POP3协议:接收邮件:
- 我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
收发原理
- 大狂神通过smtp协议连接到smtp服务器,然后发送一封邮件给网易的邮件服务器.
- 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的smtp服务器.
- QQ将接收到的邮件存储在[email protected]这个邮件账号的空间中.
- 小狂神通过Pop3协议连接到Pop3服务器收取邮件.
- 从[email protected]这个邮件账号的空间中取出邮件.
- Pop3服务器将取出来的邮件送到小狂神手中.
01-servlet代码
import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class sendMail {
public static void main(String[] args)throws Exception {
Properties properties = new Properties();
properties.setProperty("mail.host","smtp.qq.com");//设置QQ邮件服务器
properties.setProperty("mail.transport.protocol","smtp");//设置QQ邮件发送协议
properties.setProperty("mail.smtp.auth","true");//验证用户名和密码
//关于QQ邮箱,还要设置SSL加密
MailSSLSocketFactory mailSSL = new MailSSLSocketFactory();
mailSSL.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable","true");
properties.put("mail.smtp.ssl.socketFactory",mailSSL);
//使用Java发送邮件的步骤
//1.创建定义整个程序所需的环境信息Session对象
//qq独有
Session session=Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]","wemrbvbtyaniebab");
}
});
//2.通过session得到transport对象
Transport ts = session.getTransport();
//3.使用邮箱的用户名和授权码连上邮件服务器
ts.connect("smtp.qq.com","[email protected]","wemrbvbtyaniebab");
//4.创建邮件
MimeMessage message = new MimeMessage(session);
//指明发送邮件人
message.setFrom(new InternetAddress("[email protected]"));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("[email protected]"));
//指明邮件的标题
message.setSubject("只包含文本的内容");
//准备图片数据
MimeBodyPart image = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("src\\resources\\bz.jpg"));
image.setDataHandler(dh);
image.setContentID("bz.jpg");
//邮件的文本内容
MimeBodyPart text = new MimeBodyPart();
text.setContent("<h1>你好啊</h1><img src='cid:bz.jpg'>","text/html;charset=UTF-8");
//描述数据关系
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(image);
mimeMultipart.addBodyPart(text);
mimeMultipart.setSubType("related");//mixed最大
//保存到数据中
message.setContent(mimeMultipart);
message.saveChanges();
//5.发送邮件
ts.sendMessage(message,message.getAllRecipients());
ts.close();
}
}
``