logo
0
0
Login

简易SMTP邮件接收服务器

这是一个简单的SMTP邮件接收服务器,用于接收和保存发送到此服务器的电子邮件。它不会转发邮件,只会将接收到的邮件保存到本地文件系统中。

功能特点

  • 监听SMTP端口(25)接收邮件
  • 不需要身份验证即可接收邮件
  • 将接收到的邮件保存为.eml文件
  • 在控制台输出邮件的基本信息(发件人、收件人、主题)

安装

  1. 确保已安装Node.js和npm
  2. 克隆或下载此仓库
  3. 在项目目录中运行以下命令安装依赖:
npm install

使用方法

启动服务器

由于服务器默认监听25端口(需要管理员权限),请使用以下命令启动:

sudo npm start

如果不想使用sudo,可以修改server.js文件中的PORT常量,改为1024以上的端口(如2525)。

查看接收到的邮件

接收到的邮件将保存在项目目录下的emails文件夹中,文件名格式为:时间戳-随机字符串.eml

您可以使用任何支持.eml格式的邮件客户端(如Thunderbird、Outlook等)打开这些文件查看邮件内容。

测试方法

您可以使用以下方法测试此SMTP服务器:

使用telnet

telnet localhost 25

然后输入SMTP命令:

HELO example.com MAIL FROM:<sender@example.com> RCPT TO:<recipient@example.com> DATA Subject: Test Email This is a test email. . QUIT

使用swaks(Swiss Army Knife for SMTP)

swaks --to recipient@example.com --from sender@example.com --server localhost --body "This is a test email"

使用其他邮件客户端

配置您的邮件客户端,将SMTP服务器设置为您运行此服务器的IP地址,端口为25(或您自定义的端口)。

测试TLS连接

如果您启用了TLS支持,可以使用以下方法测试TLS连接:

使用OpenSSL测试STARTTLS

openssl s_client -starttls smtp -connect localhost:25

使用OpenSSL测试直接TLS连接(安全端口)

openssl s_client -connect localhost:465

使用swaks测试TLS

测试STARTTLS:

swaks --to recipient@example.com --from sender@example.com --server localhost --port 25 --tls

测试直接TLS连接(安全端口):

swaks --to recipient@example.com --from sender@example.com --server localhost --port 465 --tls-on-connect

注意:如果使用自签名证书,您可能需要添加--tls-verify=0参数来跳过证书验证。

配置

服务器配置可以通过修改config.js文件或设置环境变量来自定义:

  • SMTP_PORT: SMTP服务器监听端口(默认:25)
  • EMAILS_DIR: 邮件存储目录(默认:'emails')
  • AUTH_OPTIONAL: 是否禁用身份验证(默认:true)
  • MAX_SIZE: 最大邮件大小,单位字节(默认:10MB)
  • LOG_LEVEL: 日志级别(默认:'info')

TLS配置

服务器支持TLS加密,可以通过以下环境变量配置:

  • TLS_ENABLED: 是否启用TLS(默认:false)
  • TLS_CERT: 证书文件路径(默认:'certificate.pem')
  • TLS_KEY: 私钥文件路径(默认:'private-key.pem')
  • TLS_ALLOW_INSECURE: 是否允许不安全的TLS连接(默认:false)
  • SECURE_PORT: 安全SMTP端口,用于直接TLS连接(默认:465)

生成自签名证书

对于测试环境,您可以使用项目中提供的脚本来生成自签名证书:

node generate-cert.js

这个脚本会引导您完成证书生成过程,并提供如何配置TLS的说明。

或者,您也可以直接使用OpenSSL命令:

openssl req -new -x509 -keyout private-key.pem -out certificate.pem -days 365 -nodes

生成证书时,系统会提示您输入一些信息。对于"Common Name (e.g. server FQDN or YOUR name)",请输入您的服务器域名或IP地址。

注意事项

  • 此服务器仅用于开发和测试目的,不建议在生产环境中使用
  • 默认情况下,服务器不需要身份验证即可接收邮件
  • 监听25端口通常需要管理员权限
  • 此服务器不会转发邮件,只会将接收到的邮件保存到本地