邮件告警工具
邮件服务是项目中常用的,看到别人写了一个,手痒了,自己也整一个。
一:邮箱的基本协议
-
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
-
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。 -
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
二:新浪邮箱开启服务
- 新浪邮箱开启客户端认证:
- 接受完验证码填写之后,记录下验证码,同时开启POP、SMTP和IMAP、SMTP
- 需要发送短信的
- 在记录下新浪微博的POP3、SMTP服务器地址:
三:163邮箱开启服务
- 163邮箱打开设置点击POP3服务和SMTP服务:
- 开启POP3服务和SMTP服务 需要发送短信的
- 在记录下163邮箱的POP3、SMTP服务器地址:
四:QQ邮箱开启服务
- 设置--->账户
使劲往下拉
- 同样的开启服务需要发送短信的,
- 发送完成后记录一下生成的验证码
pop.qq.com,使用SSL,端口号995
smtp.qq.com,使用SSL,端口号465或587
五:上代码
不带附件的格式:
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void smtp_send(String host,int port,String send_user,String auth,
String receive_user,String send_title,String send_text) throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", host);
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(props);
session.setDebug(true);// 这里设置可以查看打印日志
Message message = new MimeMessage(session);
// 新浪发送邮件必须要有主题哦,否则永远无法发送成功!
message.setSubject(send_title);
message.setText(send_text);
// 现在这里发送人必须与认证人一致,否则报错
message.setFrom(new InternetAddress(send_user));
Transport transport = session.getTransport();
transport.connect(host, port, send_user, auth);
transport.sendMessage(message, new Address[]{new InternetAddress(receive_user)});
}
public static void main(String[] args) throws Exception {
//将整体代码放到一个服务里面,参数为收件人|标题|内容 这样就封装成一个邮件发送的服务了
String receive_user = "收件人邮箱";
String send_title = "smtp标题";
String send_text = "可以打印一些告警信息\r\n错误提示";
smtp_send("smtp.sina.com",25,"认证授权码的邮箱","授权码",
receive_user,send_title,send_text);
smtp_send("smtp.163.com",25,"认证授权码的邮箱","授权码",
receive_user,send_title,send_text);
smtp_send("smtp.qq.com",587,"认证授权码的邮箱","授权码",
receive_user,send_title,send_text);
}
}
带附件的格式:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class SendEmail {
@SuppressWarnings("restriction")
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.sina.com");
props.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(props,
new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//返回发件人账号与密码信息
return new PasswordAuthentication("发件人","授权码");
}
}
);
// 这里设置可以查看打印日志
session.setDebug(true);
Message message = new MimeMessage(session);
// 新浪发送邮件必须要有主题哦,否则永远无法发送成功!
message.setSubject("被退信的通知:");
message.setFrom(new InternetAddress("发件人"));
MimeMultipart mixed = new MimeMultipart("mixed");// 构建一个总的邮件块
message.setContent(mixed);
DataSource leftDataSource = new FileDataSource(new File("D:\\JAVA\\data\\1.txt"));
MimeBodyPart left = new MimeBodyPart();// 附件
left.setDataHandler(new DataHandler(leftDataSource));
left.setFileName("1.txt");
mixed.addBodyPart(left);
DataSource rightDataSource = new FileDataSource(new File("D:\\JAVA\\data\\2.txt"));
MimeBodyPart right = new MimeBodyPart();// 附件
right.setDataHandler(new DataHandler(rightDataSource));
right.setFileName("2.txt");
mixed.addBodyPart(right);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
new FileInputStream("D:\\JAVA\\data\\3.txt"), "utf-8"));
String lineTxt = null;
StringBuilder stringBuilder = new StringBuilder();
while ((lineTxt = bufferedReader.readLine()) != null) {
stringBuilder.append(lineTxt).append("\n");
}
MimeBodyPart neirong = new MimeBodyPart();// 附件
neirong.setContent(stringBuilder.toString(), "text/html;charset=UTF-8");
mixed.addBodyPart(neirong);
Transport transport = session.getTransport();
transport.connect("smtp.sina.com", 25, "发件人", "授权码");
transport.sendMessage(message, new Address[]{new InternetAddress("收件人")});
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?