当前位置: 首页 > news >正文

利用C#和SQL Server实现自动化解决邮件数据的处理

引言在金融应用领域通过电子邮件手动管理用户分配数据不仅耗时而且容易出错。传统的人工处理方式需要工作人员每天检查邮件、下载附件、解析数据并更新数据库这一系列重复性工作既低效又存在数据录入错误的风险。本文将介绍如何利用 C# 和 SQL Server 构建一个自动化解决方案实现从邮件读取、附件下载到数据库更新的全流程自动化处理。该系统特别适用于处理主题包含AllotmentsFiles的邮件并更新 SQL Server 中的 bidfiledetails 表显著提高数据处理效率和准确性。1. 系统概述与优势1.1 处理流程该自动化系统主要包含三个核心处理步骤连接邮件服务器使用 POP3 协议连接到邮件服务器支持 Gmail 等常见邮件服务提供商。筛选目标邮件自动筛选出当天收到的、主题包含AllotmentsFiles的邮件。处理附件并更新数据库下载邮件中的 CSV 附件解析内容并更新 SQL Server 数据库中的分配数据。1.2 系统优势自动化重复工作取代人工检查邮件和处理附件的过程减少人为错误自动化的数据处理流程避免了手工录入可能导致的错误全天候运行系统可配置为每日自动运行无需人工干预高效数据处理批量处理大量分配数据显著提高工作效率2. 开发环境与工具配置2.1 所需工具开发工具Visual StudioC#数据库SQL ServerNuGet 包OpenPop.NET用于通过 POP3 协议读取邮件System.Data.SqlClient用于数据库连接和操作2.2 配置设置系统配置存储在 web.config 文件中包含邮件服务器连接信息123456appSettingsaddkeyHostServervaluepop.gmail.com/addkeyMailPortvalue995/addkeyMailUservalueyour-emailgmail.com/addkeyMailPwdvalueyour-password//appSettings此配置允许灵活更改邮件服务器设置而无需修改代码。3. 邮件处理核心代码实现读取邮件功能以下 C# 代码实现了从邮件服务器读取并处理目标邮件的功能123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354publicvoidReadTheDataFromTheMail(){try{stringmailHost ConfigurationManager.AppSettings[HostServer];intmailPort Convert.ToInt32(ConfigurationManager.AppSettings[MailPort]);stringmailID ConfigurationManager.AppSettings[MailUser];stringmailPwd ConfigurationManager.AppSettings[MailPwd];using(Pop3Client client newPop3Client()){client.Connect(mailHost, mailPort,true);client.Authenticate(mailID, mailPwd);intmessageCount client.GetMessageCount();DateTime today DateTime.UtcNow.Date;for(inti messageCount; i 0; i--){MessageHeader headers client.GetMessageHeaders(i);stringsubject headers.Subject;DateTime emailDate headers.DateSent;if(!string.IsNullOrEmpty(subject) subject.Contains(AllotmentsFiles) emailDate.Date today){OpenPop.Mime.Message message client.GetMessage(i);foreach(var attachmentinmessage.FindAllAttachments()){if(attachment.FileName.Contains(AllotmentsFiles_) attachment.FileName.EndsWith(.csv)){stringbaseDirectory E:\Allotment - Applns\Allotmentfiles;stringdateFolder DateTime.Now.ToString(yyyy-MM-dd);stringfileFolder Path.Combine(baseDirectory, dateFolder);if(!Directory.Exists(fileFolder))Directory.CreateDirectory(fileFolder);stringfilePath Path.Combine(fileFolder, attachment.FileName);File.WriteAllBytes(filePath, attachment.Body);errorlog($CSV file {attachment.FileName},Downloaded successfully!);ProcessAllotmentData(filePath);}}}}}}catch(Exception ex){errorlog(Error reading emails, ex.Message);}}这段代码实现了以下功能从配置读取邮件服务器连接信息使用 POP3 连接到邮件服务器筛选当天且主题包含AllotmentsFiles的邮件下载符合条件的 CSV 附件并保存到按日期组织的文件夹中调用数据处理方法处理下载的附件4. CSV数据处理与数据库更新数据处理流程下载的 CSV 文件需要被解析并更新到数据库中以下是实现代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364publicvoidProcessAllotmentData(stringfilePath){try{stringfileName Path.GetFileName(filePath);string[] parts fileName.Split(_);stringscriptName parts.Length 0 ? parts[0] :null;using(StreamReader sr newStreamReader(filePath)){string[] rows sr.ReadToEnd().Split(\n);for(inti 1; i rows.Length; i){string[] rowValues rows[i].Split(,);if(rowValues.Length 7){stringappNo rowValues[2].Trim();stringpan rowValues[4].Trim();stringqty rowValues[5].Trim();stringclientName rowValues[6].Trim();stringreason rowValues[7].Trim();SqlParameter[] param {newSqlParameter(symbol, scriptName),newSqlParameter(appno, appNo),newSqlParameter(pan, pan),newSqlParameter(qty, qty),newSqlParameter(reason, reason)};stringstatusQuery SELECT * FROM bidfiledetails (NOLOCK)WHERE AppNoappno AND Symbolsymbol AND PanNopan AND AllotmentFlag ! Y;DataSet ds SqlHelper.ExecuteDataset(SqlCon, CommandType.Text, statusQuery, param);if(ds.Tables[0].Rows.Count 0){stringupdateQuery UPDATE bidfiledetailsSET AllotmentFlagY, SharesAllotedqty, Sharesrej_reasonreasonWHERE AppNoappno AND PanNopan AND Symbolsymbol;SqlHelper.ExecuteNonQuery(SqlCon, CommandType.Text, updateQuery, param);errorlog(Updated Record, $PanNo: {pan}, ApplicationNo: {appNo}, Symbol: {scriptName});}else{stringheader ApplicationNo|ClientName|Quantity|Reason|PanNo;stringmessage ${appNo}|{clientName}|{qty}|{reason}|{pan}{Environment.NewLine};errorlog(header, message);}}else{errorlog(Row does not have enough columns,);}}}}catch(Exception ex){ExceptionLogging.Exceptionlog(Exception in ProcessAllotmentData, ex.Message);}}此代码实现了从CSV文件名提取脚本名称逐行读取CSV文件内容验证数据完整性确保有足够列数检查数据库中的记录状态更新符合条件的记录或记录未匹配的情况全面的错误处理和日志记录5. 关键技术与实现要点5.1 核心技术组件邮件处理使用 OpenPop.NET 库通过 POP3 协议读取邮件文件处理系统自动按日期组织下载的附件文件数据验证严格检查CSV文件结构和数据完整性数据库操作使用参数化查询确保SQL注入防护错误处理全面的异常捕获和日志记录机制
http://www.zskr.cn/news/1365204.html

相关文章:

  • 量化模型误差相关性:从算法同源到基础模型遗传的风险测量
  • 双层优化与线性规划:超参数调优的高效混合策略
  • C# OpenCvSharp内存管理陷阱与性能优化指南
  • TeamSpeak 3权限与防火墙配置深度解析
  • CSS Flexbox高级技巧:构建灵活的响应式布局
  • Struts2 S2-057漏洞深度解析:OGNL注入与命名空间继承利用链
  • G-Helper终极指南:告别Armoury Crate臃肿,10MB轻量级华硕笔记本控制神器
  • Oracle EBS《企业会计准则第 1 号 — 存货》移动加权平均法要求,退货作为库存减少,采用当前加权平均成本,不追溯历史采购成本
  • 国产系统运维笔记:手动重建麒麟KYLINOS的systemd-resolved目录,解决DNS解析文件丢失问题
  • 盘点2026年服务不错的代写商业计划书企业,创投名堂口碑良好 - mypinpai
  • 【AI Agent体育行业落地实战指南】:20年架构师亲授5大高价值场景与避坑清单
  • 贵金属收纳与合肥变现指南:渠道对比与实用思路 - 李宏哲1
  • JMeter工程化实践:从接口测试到压力建模的全链路指南
  • 自愈机器学习系统可靠性:数据质量与测试集规模如何影响模型修复决策
  • SketchUp STL插件终极指南:5分钟掌握3D打印模型转换的完整开源方案
  • 5分钟解锁WeMod完整功能:开源工具Wand-Enhancer免费用法指南
  • 2025-2026年生态美家电话查询:治理前请核实资质与合同条款 - 品牌推荐
  • Seraphine:英雄联盟玩家的智能游戏伙伴,如何用Python自动化提升你的游戏体验?
  • 金融素养如何影响投资决策:基于社交媒体数据的深度分析
  • YOLO12+Unity实现工业级实时3D空间标注映射
  • 如何用BooruDatasetTagManager将AI图像标注效率提升500%:从零构建高质量训练数据集
  • 机器学习增强恒电位分子动力学:原子尺度模拟锂枝晶生长机制
  • 深圳劳力士名表回收哪家靠谱?实地走访 3 家热门店,流程 / 价格 / 套路详解 - 奢侈品回收测评
  • 2025-2026年佛山南北旺全铝材料源头厂家电话查询:采购前需了解产品特性与行业标准 - 品牌推荐
  • 深入解析大模型架构之争:全能通用模型 vs 领域专精模型
  • Frida Swift动态分析实战:突破iOS限制的可观测性方案
  • APT检测实战:基于特征选择的机器学习模型优化与关键特征解析
  • Outlook CVE-2023-36895漏洞深度解析:HTML渲染引发的远程代码执行
  • 基于机器学习与CICDDoS2019数据集的实时DDoS攻击检测实战
  • 安卓逆向实战:用Frida Hook Java层还原API-Sign签名算法