使用 SMTP 发送邮件的总结

初步尝试

在项目中,我需要实现邮件发送功能,于是决定使用 SMTP 协议来发送邮件。最初,我尝试使用 C++ 中的 curl 库进行连接,然而在连接时遇到了一些问题,主要是无法连接到服务器。
图片1

问题分析

  • 使用的端口 587 被拒绝连接。经过排查,发现最初可能是由于编码问题导致无法正确连接。
    图片1
  • 虽然在 Python 中能成功连接 SMTP 服务,但在 C++ 中却无法连接成功。这让我陷入了困惑。

使用 Python 脚本解决问题

由于在 Python 中 SMTP 连接能够正常工作,我决定通过系统调用来直接运行 Python 脚本,解决 C++ 发送邮件的问题。最终,成功调用 Python 脚本实现了邮件发送功能。
图片1

1
2
3
4
5
6
7
8
9
10
11
12
13
import smtplib
from email.mime.text import MIMEText

msg = MIMEText("Hello World")
msg["Subject"] = "SMTP Test"
msg["From"] = "your-email@example.com"
msg["To"] = "recipient@example.com"

server = smtplib.SMTP("smtp.example.com", 587)
server.starttls()
server.login("your-email@example.com", "password")
server.sendmail(msg["From"], msg["To"], msg.as_string())
server.quit()

我通过 C++ 使用 system() 函数来调用这个 Python 脚本,从而绕过了 C++ 中的 SMTP 连接问题。


集成到 Java 项目

一旦邮件发送功能在 C++ 中解决了,我开始将其集成到 Java 项目中。过程非常顺利,只需导入相关库即可实现。

1
2
3
4
5
6
7
8
import javax.mail.*;
import javax.mail.internet.*;

public class EmailSender {
public static void sendEmail(String to, String subject, String body) {
// Email sending code using JavaMail API
}
}

然而,在集成过程中遇到了一个经典的 Spring Boot 版本问题。Spring Boot 版本不匹配导致无法解析依赖项。这个问题需要到网上查找解决方案,并确保正确配置了 pom.xml 中的依赖版本。


小结

通过这次实现 SMTP 邮件发送功能的过程,我经历了从 C++ 到 Python,再到 Java 的集成工作。虽然 C++ 连接 SMTP 时遇到了一些问题,但最终通过调用 Python 脚本解决了问题。而在 Java 中集成时,也遇到了一些常见的框架版本不匹配问题,解决这些问题后邮件发送功能得以顺利实现。

图片1