什么是 SMTP 协议
SMTP或简单的邮件传输协议,是一种将电子邮件从一台服务器发送到另一台服务器的快速简便的方法。通过 SendGrid 等第三方服务商提供的SMTP服务,我们可以通过第三方服务器而不是客户端或服务器来传递电子邮件。
要了解 SMTP 协议, 我们使用Telnet发送测试SMTP电子邮件
$ telnet smtp.sendgrid.net 25
Trying 169.45.113.201...
Connected to smtp.sendgrid.net.
Escape character is '^]'.
220 SG ESMTP service ready at ismtpd0009p1sjc2.sendgrid.net
AUTH LOGIN #成功连接到SendGrid后,通过键入登录到服务器AUTH LOGIN。
334 VXNlcm5hbWU6 #邮件服务器以回应334 VXNlcm5hbWU6,即对您的用户名进行Base64编码的请求。
YXBpa2V5 #apikey即用户名的加密
334 UGFzc3dvcmQ6 #此响应是对您的密码(您的API密钥)的Base64编码请求。
??????????????? #在下一行中输入您的Base64转换后的API密钥作为密码。
235 Authentication successful #邮件服务器以响应235 Authentication successful。到此为止表示您通过选定端口到smtp.sendgrid.net的连接已打开,并且您的API密钥有效。
通过SMTP协议, 编写客户端向邮件服务器提交发送邮件请求
package mail
import javax.mail.internet.MimeMessage
import java.util.Properties
import javax.mail.Session
import javax.mail.Message
import javax.mail.Transport
import java.util.Date
import javax.mail.MessagingException
fun main() {
val props = Properties();
// SMTP 邮件服务器名称
props.put("mail.smtp.host", "smtp.139.com");
// props.put("mail.smtp.port", "25");
val session = Session.getInstance(props, null);
try {
val msg = MimeMessage(session);
// 发件人
val me = "me@139.com"
msg.setFrom(me);
// 收件人
msg.setRecipients(Message.RecipientType.TO, "test@qq.com")
msg.setSubject("subject")
// 发送日期
msg.setSentDate(Date())
// 正文
msg.setText("content");
// SMTP 邮件服务器认证账号&密码
Transport.send(msg, me, "139pswd");
println("发送OK")
} catch (e: Throwable) {
println("发送失败 ${ e.message }");
e.printStackTrace()
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· .NET 阻止Windows关机以及阻止失败的一些原因
· 博客园2025新款「AI繁忙」系列T恤上架
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· C# LINQ 快速入门实战指南,建议收藏学习!