You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何从新邮件提取数据保存至本地文件并用于C#开发

可行方案推荐

方案1:Power Automate 桌面版(无代码快速实现)

如果不想写代码,Power Automate桌面版是最直接的选择,步骤极简:

  • 新建流,选择触发条件:当新邮件到达Outlook/目标邮箱客户端
  • 添加「提取文本」动作:按照你截图里的拆分逻辑,把邮件内容拆成需要的字段(比如按分隔符拆分、正则匹配)
  • 添加「写入文本文件」动作:指定本地保存路径,把提取到的数据按CSV、JSON等你需要的格式写入文件

注意:桌面版可直接操作本地文件,无需依赖云端同步,完全适配你的需求。

方案2:直接用C# 一站式处理(后续要C#,一步到位)

既然后续要用C#处理数据,不如直接用C#写个小工具提取邮件,省去中间工具的学习成本,推荐两个常用库:

用MailKit(支持POP3/IMAP,跨平台)

using MailKit.Net.Imap;
using MailKit.Search;
using System.IO;

var client = new ImapClient();
// 连接邮箱服务器(示例:QQ邮箱为imap.qq.com,端口993)
client.Connect("imap.yourmail.com", 993, true);
client.Authenticate("your-email@xxx.com", "your-password/app-code");

// 打开收件箱
var inbox = client.Inbox;
inbox.Open(MailKit.FolderAccess.ReadOnly);

// 搜索未读邮件
var results = inbox.Search(SearchQuery.NotSeen);
foreach (var uid in results)
{
    var message = inbox.GetMessage(uid);
    // 提取邮件内容并按需求拆分
    var content = message.TextBody;
    var extractedData = content.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
    
    // 写入本地文件
    File.AppendAllLines(@"C:\mail-data.txt", extractedData);
    
    // 标记邮件为已读(可选)
    inbox.AddFlags(uid, MailKit.MessageFlags.Seen, true);
}

client.Disconnect(true);

用Outlook Interop(针对本地Outlook客户端)

如果你用的是本地Outlook客户端,这个方案更简单:

using Microsoft.Office.Interop.Outlook;
using System.IO;

var outlookApp = new Application();
var inbox = outlookApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);

foreach (MailItem mail in inbox.Items)
{
    if (!mail.UnRead) continue;
    
    // 提取内容并拆分
    var content = mail.Body;
    var dataLines = content.Split('\n', StringSplitOptions.RemoveEmptyEntries);
    
    // 追加写入文件
    File.AppendAllLines(@"C:\mail-data.csv", dataLines);
    
    // 标记邮件为已读
    mail.UnRead = false;
}

方案3:Outlook VBA 轻量脚本(快速上手)

如果不想写C#,也可以用Outlook自带的VBA宏快速实现:

  1. 打开Outlook,按Alt+F11打开VBA编辑器
  2. 双击ThisOutlookSession,粘贴以下代码:
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objMail As MailItem
    Set objMail = Application.Session.GetItemFromID(EntryIDCollection)
    
    ' 提取邮件内容并拆分
    Dim content As String
    content = objMail.Body
    Dim dataArr() As String
    dataArr = Split(content, vbCrLf)
    
    ' 写入本地文件
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim ts As Object
    Set ts = fso.OpenTextFile("C:\mail-data.txt", 8, True) ' 8代表追加模式
    For Each line In dataArr
        If line <> "" Then ts.WriteLine(line)
    Next
    ts.Close
End Sub
  1. 保存后重启Outlook,新邮件到达时会自动提取数据写入指定文件。

方案对比

  • Power Automate:无代码,适合新手快速搭建,但需要熟悉界面操作逻辑
  • C#:和后续处理统一技术栈,灵活性最高,可自定义复杂提取规则
  • VBA:轻量无需额外工具,仅适用于Outlook客户端场景

内容的提问来源于stack exchange,提问作者Shawn_Medinsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:33:30