C# / .NET + Server酱:任务完成/出错,微信立刻知道
效果:在 C# / .NET 程序中调用 Server酱 API,任务完成、异常告警等消息实时推送到你的微信。
前置条件
- 一个 Server酱 SendKey(30 秒获取教程)
- 本机可运行 C# / .NET 的环境
官方示例实现
以下代码来自官方示例仓库 serverchan-demo(csharp/Program.cs),同样自动识别两种 SendKey,可直接复制使用:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string data = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "../.env"));
var key = data.Split('=')[1].Trim();
var ret = await ScSend("主人服务器宕机了", "第一行\n\n第二行", key);
Console.WriteLine(ret);
}
static async Task<string> ScSend(string text, string desp = "", string key = "[SENDKEY]")
{
var postData = $"text={Uri.EscapeDataString(text)}&desp={Uri.EscapeDataString(desp)}";
// 判断 sendkey 是否以 "sctp" 开头并提取数字部分
if (key.StartsWith("sctp"))
{
var match = Regex.Match(key, @"^sctp(\d+)t");
if (match.Success)
{
var num = match.Groups[1].Value;
url = $"https://{num}.push.ft07.com/send/{key}.send";
}
else
{
throw new ArgumentException("Invalid key format for sctp.");
}
}
else
{
url = $"https://sctapi.ftqq.com/{key}.send";
}
var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded");
var response = await httpClient.SendAsync(request);
var responseStream = await response.Content.ReadAsStreamAsync();
var reader = new StreamReader(responseStream);
return await reader.ReadToEndAsync();
}
}
运行方式:
dotnet run # 项目文件见官方仓库 csharp/csharp.csproj
官方示例从仓库根目录的
.env文件读取SENDKEY;集成到你的项目时,可改为读取环境变量SERVERCHAN_SENDKEY或你的配置系统。
常见问题
免费额度够用吗?
免费版每天 5 条。程序类通知建议在任务结束时合并推送一条摘要;量大可订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。
消息没收到怎么办?
先检查返回 JSON 的 code 是否为 0,再按 常见问题与排查 逐项检查。
有频率限制吗?
每分钟最多 50 条,注意不要在循环里逐条推送,先聚合再发送。