JMail 是一个很老(约 2003-2010 年流行)的第三方邮件发送组件,它已经不再更新,并且与现代的 .NET 框架(.NET Core, .NET 5/6/7/8)完全不兼容。

(图片来源网络,侵删)
本指南将分为两部分:
- 针对老项目(.NET Framework):如何正确配置和使用 JMail。
- 针对新项目(强烈推荐):为什么应该放弃 JMail,并使用现代、安全、高效的替代方案。
第一部分:针对老项目 (.NET Framework) 的 JMail 配置与使用
如果你正在维护一个古老的 ASP.NET Web Forms (ASPX) 项目,并且其中使用了 JMail,那么可以参考以下步骤。
获取 JMail 组件
JMail 通常是一个 .dll 文件,你需要从网上找到这个组件的下载包(Dimac 的官方下载站已关闭,但可以在一些老牌资源网站找到)。
下载后,你会得到一个 jmail.dll 文件。

(图片来源网络,侵删)
在项目中引用 JMail
- 将
jmail.dll文件复制到你的项目文件夹中(放在bin文件夹里,或者一个专门的Libs文件夹)。 - 在 Visual Studio 中,右键点击你的“引用”(References)。
- 选择“添加引用”(Add Reference)。
- 切换到“浏览”(Browse) 选项卡,找到并选中你刚刚复制过来的
jmail.dll文件。 - 点击“确定”。
编写代码发送邮件
JMail 的使用非常直接,下面是一个典型的 C# 示例代码,通常放在一个 ASPX 页面的后台代码文件(.aspx.cs)中。
// 引入 JMail 的命名空间
using JMail;
protected void btnSendEmail_Click(object sender, EventArgs e)
{
try
{
// 1. 创建 JMail.Message 对象
SmtpMail oJmail = new SmtpMail();
// 2. 设置邮件基本属性
oJmail.From = "your_email@yourdomain.com"; // 发件人邮箱
oJmail.FromName = "网站管理员"; // 发件人姓名
oJmail.Subject = "来自网站的测试邮件"; // 邮件主题
oJmail.Body = "这是一封使用 JMail 组件发送的测试邮件。"; // 邮件正文
oJmail.Charset = "utf-8"; // 邮件字符编码,强烈建议使用 utf-8
// 3. 添加收件人
oJmail.AddRecipient("recipient1@example.com", "收件人A", "");
oJmail.AddRecipient("recipient2@example.com", "", ""); // 也可以只写邮箱
// oJmail.AddRecipientCC("cc@example.com", "抄送人"); // 添加抄送
// oJmail.AddRecipientBCC("bcc@example.com", "密送"); // 添加密送
// 4. 设置 SMTP 服务器信息 (这是最关键的一步)
// 你需要从你的邮件服务商(如腾讯企业邮、阿里云企业邮、Exchange 等)获取这些信息
oJmail.MailServerUserName = "smtp_username"; // SMTP 服务器的登录用户名
oJmail.MailServerPassWord = "smtp_password"; // SMTP 服务器的登录密码
oJmail.MailServerPort = 25; // SMTP 服务器端口 (25 为标准, 465/587 为 SSL/TLS 加密端口)
oJmail.SenderName = "your_email@yourdomain.com"; // 发件人邮箱,有时需要和 From 一致
oJmail.ServerAddress = "smtp.yourdomain.com"; // SMTP 服务器地址
// 5. 发送邮件
// 返回值为 bool,表示是否成功
bool success = oJmail.Send();
if (success)
{
lblMessage.Text = "邮件发送成功!";
lblMessage.ForeColor = System.Drawing.Color.Green;
}
else
{
// 如果发送失败,可以获取错误信息
lblMessage.Text = "邮件发送失败!错误信息: " + oJmail.ErrorMessage;
lblMessage.ForeColor = System.Drawing.Color.Red;
}
}
catch (Exception ex)
{
lblMessage.Text = "发生异常: " + ex.Message;
lblMessage.ForeColor = System.Drawing.Color.Red;
}
}
关键系统参数配置说明
在上面的代码中,有几个参数至关重要,它们构成了邮件发送的“系统参数”:
| 参数名 | 说明 | 如何获取? |
|---|---|---|
ServerAddress |
SMTP 服务器地址,这是你用来发送邮件的服务器域名或IP。 | 从你的邮件服务商处获取。 - 腾讯企业邮: smtp.exmail.qq.com- 阿里云企业邮: smtp.mxhichina.com- Gmail: smtp.gmail.com (需要开启应用专用密码) |
MailServerPort |
SMTP 服务器端口,默认是 25,但如果服务器要求加密,则需要使用 465 (SSL) 或 587 (TLS)。 |
从你的邮件服务商处获取,现代服务商通常要求使用加密端口。 |
MailServerUserName |
SMTP 登录用户名,通常是你的完整邮箱地址。 | 邮件服务商提供。 |
MailServerPassWord |
SMTP 登录密码。注意:如果你的邮箱开启了“双重验证”(如 Gmail),这里通常不能使用你的登录密码,而需要使用“应用专用密码”(App Password)。 | 邮件服务商提供,对于开启了双重验证的邮箱,需要在账户设置中生成应用专用密码。 |
From / SenderName |
发件人邮箱和名称。From 必须是你在该 SMTP 服务器上注册的、有权限发送邮件的邮箱地址。 |
你自己的邮箱地址。 |
第二部分:针对新项目(强烈推荐)
请务必不要在新项目中使用 JMail! 理由如下:
- 技术过时:不兼容 .NET Core / .NET 5/6/7/8 等现代框架。
- 安全风险:停止维护意味着没有安全补丁,可能存在未知的漏洞。
- 功能缺失:不支持现代邮件发送标准,如 S/MIME 签名、DKIM、更完善的 HTML 邮件模板等。
- 维护困难:找不到官方支持,社区资源也几乎为零。
现代替代方案
在 .NET 中,有两个官方推荐的主流邮件发送方式:

(图片来源网络,侵删)
使用 System.Net.Mail.SmtpClient (内置,.NET Framework / .NET Core+ 均可用)
这是 .NET 框架内置的类,无需安装任何 NuGet 包(除了可能需要 System.Net.Security 用于某些高级配置)。
示例代码 (.NET Core / .NET 5+):
using System.Net;
using System.Net.Mail;
public async Task SendEmailWithSmtpClient()
{
try
{
var smtpClient = new SmtpClient("smtp.yourdomain.com")
{
Port = 587, // 使用 TLS 加密的端口
Credentials = new NetworkCredential("smtp_username", "smtp_password"),
EnableSsl = true, // 启用 SSL/TLS 加密
};
var mailMessage = new MailMessage
{
From = new MailAddress("your_email@yourdomain.com", "网站管理员"),
Subject = "来自现代 .NET 应用的测试邮件",
Body = "这是一封使用 System.Net.Mail.SmtpClient 发送的测试邮件。",
IsBodyHtml = false, // 设置为 true 则可以发送 HTML 邮件
};
mailMessage.To.Add("recipient@example.com");
await smtpClient.SendMailAsync(mailMessage);
Console.WriteLine("邮件发送成功!");
}
catch (Exception ex)
{
Console.WriteLine($"邮件发送失败: {ex.Message}");
}
}
优点:
- 免费,内置。
- 足够处理大多数邮件发送场景。
缺点:
- 功能相对基础,模板支持较弱。
- 没有高级队列、重试、统计等功能。
使用专业的邮件发送库 (强烈推荐)
对于生产环境,特别是需要处理大量邮件、复杂模板、追踪和统计的场景,强烈建议使用专业的第三方库。
最受欢迎的选择:FluentEmail
FluentEmail 是一个现代化的、链式调用的邮件库,非常易用且功能强大。
-
安装 NuGet 包:
# 安装核心库 dotnet add package FluentEmail.Core # 安装 SMTP 发送器 (最常用) dotnet add package FluentEmail.Smtp # (可选) 安装 Razor 模板引擎 dotnet add package FluentEmail.Razor
-
编写代码:
using FluentEmail.Core;
using FluentEmail.Smtp;
using FluentEmail.Razor; // 如果使用 Razor 模板
public async Task SendEmailWithFluentEmail()
{
// 1. 配置发送器
var sender = new SmtpSender(() => new SmtpClient("smtp.yourdomain.com")
{
Port = 587,
Credentials = new NetworkCredential("smtp_username", "smtp_password"),
EnableSsl = true
});
// 2. 创建 Email 消息
var email = await Email
.From("your_email@yourdomain.com", "网站管理员")
.To("recipient@example.com", "收件人")
.Subject("FluentEmail 测试邮件")
// .UsingTemplate("你好 @Model.Name, 你的订单 @Model.OrderId 已创建。", new { Name = "张三", OrderId = "12345" }) // 使用 Razor 模板
.Body("这是一封使用 FluentEmail 发送的简单邮件。") // 或者直接使用 Body
.SendAsync();
if (email.Successful)
{
Console.WriteLine("邮件发送成功!");
}
else
{
Console.WriteLine($"邮件发送失败: {email.ErrorMessages}");
}
}
其他优秀选择:
- SendGrid: 顶级邮件服务提供商,提供强大的 API 和 SDK,有免费套餐,适合需要高送达率、追踪、分析等功能的场景。
- MailKit: 一个功能极其强大的邮件客户端库,不仅可以发送,还能接收邮件,API 设计优秀,是
SmtpClient的一个很好的现代替代品。
| 特性 | JMail (老) | System.Net.Mail.SmtpClient (内置) |
FluentEmail / MailKit (现代) |
|---|---|---|---|
| 技术栈 | .NET Framework | .NET Framework / .NET Core+ | .NET Core / .NET 5+ |
| 易用性 | 简单 | 中等 | 非常好 (FluentEmail) / 较好 (MailKit) |
| 功能 | 基础 | 基础 | 丰富 (模板、队列、附件等) |
| 安全性 | 低 (过时) | 中 (需正确配置 SSL) | 高 (持续更新) |
| 维护性 | 无 | 官方维护 | 社区/商业维护,活跃 |
| 推荐度 | 仅限维护老项目 | 简单场景的快速实现 | 新项目首选 |
最终建议:
- 如果你在维护一个老项目:按照第一部分的说明配置 JMail。
- 如果你要开发任何新项目:请立即忘记 JMail,选择
System.Net.Mail用于简单场景,或者直接上手 FluentEmail 或 MailKit,它们能为你提供更好的开发体验和更强的功能。
