POP3/SMTP服务 (如何使用 Foxmail 等软件收发邮件?)
已关闭 | 开启
IMAP/SMTP服务 (什么是 IMAP,它又是如何设置?)
已关闭 | 开启
Exchange服务 (什么是Exchange,它又是如何设置?)
已关闭 | 开启
CardDAV/CalDAV服务 (什么是CardDAV/CalDAV,它又是如何设置?)
已关闭 | 开启
常见的如在某网站注册了一个账户,自动发送一封激活邮件,通过邮件找回密码,自动批量发送活动信息等
电子邮件协议
1. 创建/发送邮件协议: smtp : simple mail transfer protocol 简单邮件传输协议
2. 接收邮件协议: pop3 .
邮件发送流程
发送一份邮件--smtp--->邮件服务器(管理和存储邮件)<---pop3---接收邮件
比如: http协议: hyper text transfer protocol ,规范了浏览器<---->服务器
发邮件的操作步骤
1. 搭建邮件服务器
2. 创建一个服务器端的邮件账号
3. 创建客户端的邮件账号
比如: 服务器端的账号: server@tedu.cn
客户端账号: a@tedu.cn b@tedu.cn
a账号发送邮件给b账号
比如: a@tedu.cn--smtp协议,发送邮件-->server@tedu.cn<--pop3协议,收邮件--b@tedu.cn
注意:
搭建的邮件服务器通过网络进行邮件的发送和接收,配置邮件的域名时,必须是公网域名.
如果没有公网域名,这时是无法通过网络收发邮件.
比如: 易邮邮件服务器(设置公网域名或者局域网域名),企业自己搭建邮件服务器,收发邮件没有任何费用
如果用腾讯或者163等等,付费.
* 网络收发邮件,可以通过已知的邮箱作为邮件服务器,比如: 126, 163,qq等等作为邮件服务器.
操作步骤:
步骤一: 进入到邮箱网页的设置页面,开通smtp,pop3协议.
步骤二: 写代码进行邮件的发送,需要导入邮件依赖(spring-boot-starter-mail)
java.mail核心api
1.邮件对象: MimeMessage,设置邮件的标题,邮件的发送者,接收者,邮件正文,邮件附件
接受者:
收件人: 邮件直接发送给谁
抄送: 在发送邮件时,同时给某个账号发送, 这个账号就是抄送者
暗送: 在发送邮件时,同时给某个账号发送, 这个账号就是暗送者
区别: 抄送和 暗送
抄送者: 可以同时抄送多个账号,并且多个抄送者互相知道
比如: a, b抄送者, a知道b收到邮件了, b也知道a收到邮件
暗送者: 可以同时暗送多个账号,并且多个抄送者互相知道
比如: a, b暗送者, a不知道b收到邮件了, b也不知道a收到邮件
2.会话对象: Session,建立与邮件服务器的连接
3.发送者对象: Transfer, 发送邮件对象
写代码:
1、依赖的添加
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
</dependency>
2、代码的编写
package cn.tedu;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class EmailUtil {
//IWLOBIEHYWOLCIVC
private static final String SHOUQUANMA = "XILABMOOESCJOUTD";//自己邮箱设置时,得到授权码
public static MimeMessage createSimpleMail(Session session, String authCode, String emailAddresss)
throws Exception {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 指明邮件的发件人: henanxuluo@126.com,使用126邮箱作为邮件服务器
message.setFrom(new InternetAddress("henanxuluo@126.com"));
// 指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
message.setRecipient(Message.RecipientType.TO, new InternetAddress(emailAddresss));
// 邮件的标题
message.setSubject("激活链接");
// 邮件的文本内容
message.setContent("点击激活<a href='#'>" + authCode + "</a>", "text/html;charset=UTF-8");
// 返回创建好的邮件对象
return message;
}
public static void sendEmail(String mima,String emailAddresss) throws Exception {
Properties prop = new Properties();//比如: Properties等价的application.properties
// 开启debug调试,以便在控制台查看
prop.setProperty("mail.debug", "true");
// 设置邮件服务器主机名
prop.setProperty("mail.host", "smtp.126.com");//邮件服务器: 设置的发送协议
// 发送服务器需要身份验证
prop.setProperty("mail.smtp.auth", "true");//作为邮件服务器需要发送邮件,输入密码(授权码安全点)
// 发送邮件协议名称
prop.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
// 创建session: 与126邮件服务器建立了连接
Session session = Session.getInstance(prop);
// 通过session得到transport对象
Transport ts = session.getTransport();
// 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全)
ts.connect("smtp.126.com", "henanxuluo", SHOUQUANMA);
// 创建邮件
Message message = createSimpleMail(session,mima,emailAddresss);
// 发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
public static void main(String[] args) throws Exception {
sendEmail("123456","henanxuluo@126.com");
}
}
其他关联文档
javaMail学习(二)——邮箱客户端Foxmail的使用
javaMail学习(三)——使用javaMail给易邮邮账户发简单邮件
javaMail学习(四)——使用javaMail给网易账户发简单邮件
javaMail学习(五)——使用javaMail给Q Q 邮 箱 账 户 发简单邮件