最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用C#和SQL Server實(shí)現(xiàn)自動化解決郵件數(shù)據(jù)的處理

 更新時(shí)間:2026年01月06日 08:41:51   作者:葡萄城技術(shù)團(tuán)隊(duì)  
本文將介紹如何利用 C# 和 SQL Server 構(gòu)建一個(gè)自動化解決方案,實(shí)現(xiàn)從郵件讀取、附件下載到數(shù)據(jù)庫更新的全流程自動化處理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

引言

在金融應(yīng)用領(lǐng)域,通過電子郵件手動管理用戶分配數(shù)據(jù)不僅耗時(shí)而且容易出錯(cuò)。傳統(tǒng)的人工處理方式需要工作人員每天檢查郵件、下載附件、解析數(shù)據(jù)并更新數(shù)據(jù)庫,這一系列重復(fù)性工作既低效又存在數(shù)據(jù)錄入錯(cuò)誤的風(fēng)險(xiǎn)。本文將介紹如何利用 C# 和 SQL Server 構(gòu)建一個(gè)自動化解決方案,實(shí)現(xiàn)從郵件讀取、附件下載到數(shù)據(jù)庫更新的全流程自動化處理。該系統(tǒng)特別適用于處理主題包含"AllotmentsFiles"的郵件,并更新 SQL Server 中的 bidfiledetails 表,顯著提高數(shù)據(jù)處理效率和準(zhǔn)確性。

1. 系統(tǒng)概述與優(yōu)勢

1.1 處理流程

該自動化系統(tǒng)主要包含三個(gè)核心處理步驟:

  • 連接郵件服務(wù)器:使用 POP3 協(xié)議連接到郵件服務(wù)器,支持 Gmail 等常見郵件服務(wù)提供商。
  • 篩選目標(biāo)郵件:自動篩選出當(dāng)天收到的、主題包含"AllotmentsFiles"的郵件。
  • 處理附件并更新數(shù)據(jù)庫:下載郵件中的 CSV 附件,解析內(nèi)容并更新 SQL Server 數(shù)據(jù)庫中的分配數(shù)據(jù)。

1.2 系統(tǒng)優(yōu)勢

  • 自動化重復(fù)工作:取代人工檢查郵件和處理附件的過程
  • 減少人為錯(cuò)誤:自動化的數(shù)據(jù)處理流程避免了手工錄入可能導(dǎo)致的錯(cuò)誤
  • 全天候運(yùn)行:系統(tǒng)可配置為每日自動運(yùn)行,無需人工干預(yù)
  • 高效數(shù)據(jù)處理:批量處理大量分配數(shù)據(jù),顯著提高工作效率

2. 開發(fā)環(huán)境與工具配置

2.1 所需工具

  • 開發(fā)工具:Visual Studio(C#)
  • 數(shù)據(jù)庫:SQL Server
  • NuGet 包
    • OpenPop.NET:用于通過 POP3 協(xié)議讀取郵件
    • System.Data.SqlClient:用于數(shù)據(jù)庫連接和操作

2.2 配置設(shè)置

系統(tǒng)配置存儲在 web.config 文件中,包含郵件服務(wù)器連接信息:

<appSettings>
  <add key="HostServer" value="pop.gmail.com" />
  <add key="MailPort" value="995" />
  <add key="MailUser" value="your-email@gmail.com" />
  <add key="MailPwd" value="your-password" />
</appSettings>

此配置允許靈活更改郵件服務(wù)器設(shè)置而無需修改代碼。

3. 郵件處理核心代碼實(shí)現(xiàn)

讀取郵件功能

以下 C# 代碼實(shí)現(xiàn)了從郵件服務(wù)器讀取并處理目標(biāo)郵件的功能:

public void ReadTheDataFromTheMail()
{
    try
    {
        string mailHost = ConfigurationManager.AppSettings["HostServer"];
        int mailPort = Convert.ToInt32(ConfigurationManager.AppSettings["MailPort"]);
        string mailID = ConfigurationManager.AppSettings["MailUser"];
        string mailPwd = ConfigurationManager.AppSettings["MailPwd"];

        using (Pop3Client client = new Pop3Client())
        {
            client.Connect(mailHost, mailPort, true);
            client.Authenticate(mailID, mailPwd);

            int messageCount = client.GetMessageCount();
            DateTime today = DateTime.UtcNow.Date;

            for (int i = messageCount; i > 0; i--)
            {
                MessageHeader headers = client.GetMessageHeaders(i);
                string subject = 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 attachment in message.FindAllAttachments())
                    {
                        if (attachment.FileName.Contains("AllotmentsFiles_") && attachment.FileName.EndsWith(".csv"))
                        {
                            string baseDirectory = @"E:\Allotment - Applns\Allotmentfiles";
                            string dateFolder = DateTime.Now.ToString("yyyy-MM-dd");
                            string fileFolder = Path.Combine(baseDirectory, dateFolder);

                            if (!Directory.Exists(fileFolder))
                                Directory.CreateDirectory(fileFolder);

                            string filePath = 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);
    }
}

這段代碼實(shí)現(xiàn)了以下功能:

  • 從配置讀取郵件服務(wù)器連接信息
  • 使用 POP3 連接到郵件服務(wù)器
  • 篩選當(dāng)天且主題包含"AllotmentsFiles"的郵件
  • 下載符合條件的 CSV 附件并保存到按日期組織的文件夾中
  • 調(diào)用數(shù)據(jù)處理方法處理下載的附件

4. CSV數(shù)據(jù)處理與數(shù)據(jù)庫更新

數(shù)據(jù)處理流程

下載的 CSV 文件需要被解析并更新到數(shù)據(jù)庫中,以下是實(shí)現(xiàn)代碼:

public void ProcessAllotmentData(string filePath)
{
    try
    {
        string fileName = Path.GetFileName(filePath);
        string[] parts = fileName.Split('_');
        string scriptName = parts.Length > 0 ? parts[0] : null;

        using (StreamReader sr = new StreamReader(filePath))
        {
            string[] rows = sr.ReadToEnd().Split('\n');

            for (int i = 1; i < rows.Length; i++)
            {
                string[] rowValues = rows[i].Split(',');
                if (rowValues.Length > 7)
                {
                    string appNo = rowValues[2].Trim();
                    string pan = rowValues[4].Trim();
                    string qty = rowValues[5].Trim();
                    string clientName = rowValues[6].Trim();
                    string reason = rowValues[7].Trim();

                    SqlParameter[] param = {
                        new SqlParameter("@symbol", scriptName),
                        new SqlParameter("@appno", appNo),
                        new SqlParameter("@pan", pan),
                        new SqlParameter("@qty", qty),
                        new SqlParameter("@reason", reason)
                    };

                    string statusQuery = @"SELECT * FROM bidfiledetails  (NOLOCK)
                                           WHERE AppNo=@appno AND Symbol=@symbol AND PanNo=@pan AND AllotmentFlag != 'Y'";

                    DataSet ds = SqlHelper.ExecuteDataset(SqlCon, CommandType.Text, statusQuery, param);

                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        string updateQuery = @"UPDATE bidfiledetails
                                               SET AllotmentFlag='Y', SharesAlloted=@qty, Sharesrej_reason=@reason
                                               WHERE AppNo=@appno AND PanNo=@pan AND Symbol=@symbol";

                        SqlHelper.ExecuteNonQuery(SqlCon, CommandType.Text, updateQuery, param);
                        errorlog("Updated Record", $"PanNo: {pan}, ApplicationNo: {appNo}, Symbol: {scriptName}");
                    }
                    else
                    {
                        string header = "ApplicationNo|ClientName|Quantity|Reason|PanNo";
                        string message = $"{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);
    }
}

此代碼實(shí)現(xiàn)了:

  • 從CSV文件名提取腳本名稱
  • 逐行讀取CSV文件內(nèi)容
  • 驗(yàn)證數(shù)據(jù)完整性(確保有足夠列數(shù))
  • 檢查數(shù)據(jù)庫中的記錄狀態(tài)
  • 更新符合條件的記錄或記錄未匹配的情況
  • 全面的錯(cuò)誤處理和日志記錄

5. 關(guān)鍵技術(shù)與實(shí)現(xiàn)要點(diǎn)

5.1 核心技術(shù)組件

  • 郵件處理:使用 OpenPop.NET 庫通過 POP3 協(xié)議讀取郵件
  • 文件處理:系統(tǒng)自動按日期組織下載的附件文件
  • 數(shù)據(jù)驗(yàn)證:嚴(yán)格檢查CSV文件結(jié)構(gòu)和數(shù)據(jù)完整性
  • 數(shù)據(jù)庫操作:使用參數(shù)化查詢確保SQL注入防護(hù)
  • 錯(cuò)誤處理:全面的異常捕獲和日志記錄機(jī)制

5.2 系統(tǒng)部署方式

  • 任務(wù)計(jì)劃程序:配置為每日自動運(yùn)行的Windows計(jì)劃任務(wù)
  • Windows服務(wù):可轉(zhuǎn)換為服務(wù)實(shí)現(xiàn)24/7運(yùn)行
  • 日志監(jiān)控:通過日志文件監(jiān)控系統(tǒng)運(yùn)行狀態(tài)

6. 系統(tǒng)擴(kuò)展與優(yōu)化方向

6.1 功能增強(qiáng)建議

  • 轉(zhuǎn)換為Windows服務(wù):實(shí)現(xiàn)完全自動化的后臺處理
  • 郵件通知功能:在處理完成或出現(xiàn)錯(cuò)誤時(shí)發(fā)送通知郵件
  • 日志數(shù)據(jù)庫存儲:將日志存入SQL表便于歷史查詢和分析
  • 重試機(jī)制:為失敗的郵件下載實(shí)現(xiàn)自動重試邏輯

6.2 性能優(yōu)化建議

  • 實(shí)現(xiàn)批量更新操作減少數(shù)據(jù)庫往返
  • 添加并發(fā)處理能力提高大量郵件的處理速度
  • 優(yōu)化內(nèi)存使用處理超大附件文件

結(jié)論

本文詳細(xì)介紹了一個(gè)基于C#和SQL Server的自動化郵件處理系統(tǒng),能夠高效地從郵件中提取分配數(shù)據(jù)并更新數(shù)據(jù)庫。該系統(tǒng)通過自動化取代了繁瑣的手工操作,顯著提高了金融應(yīng)用中分配數(shù)據(jù)處理的效率和準(zhǔn)確性。核心功能包括郵件服務(wù)器連接、目標(biāo)郵件篩選、CSV附件下載與解析以及數(shù)據(jù)庫更新等完整流程。系統(tǒng)采用模塊化設(shè)計(jì),具有良好的可擴(kuò)展性,可通過轉(zhuǎn)換為Windows服務(wù)、添加通知功能等方式進(jìn)一步增強(qiáng)。該解決方案不僅適用于金融領(lǐng)域的分配數(shù)據(jù)處理,其設(shè)計(jì)思路和實(shí)現(xiàn)方法也可應(yīng)用于其他需要從郵件自動提取數(shù)據(jù)并更新數(shù)據(jù)庫的類似場景。

以上就是利用C#和SQL Server實(shí)現(xiàn)自動化解決郵件數(shù)據(jù)的處理的詳細(xì)內(nèi)容,更多關(guān)于C# SQL Server數(shù)據(jù)自動化處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# 去除首尾字符或字符串的方法

    C# 去除首尾字符或字符串的方法

    C# 去除首尾字符或字符串的方法,需要的朋友可以參考一下
    2013-04-04
  • C# FileStream復(fù)制大文件

    C# FileStream復(fù)制大文件

    這篇文章主要為大家詳細(xì)介紹了C# FileStream復(fù)制大文件的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 聊聊Unity自定義組件之序列幀播放組件問題

    聊聊Unity自定義組件之序列幀播放組件問題

    由于最近的項(xiàng)目中需要用到大量的序列幀動畫以及邏輯處理,本來想用Unity自帶的Animation組件來實(shí)現(xiàn)的,但由于甲方需求一再變更,需要處理的邏輯太多,為了方便修改和拓展,所以就根據(jù)自己項(xiàng)目的需求自定義了一個(gè)序列幀播放組件來輔助開發(fā)
    2022-01-01
  • C#利用Spire.XLS for .NET將Excel轉(zhuǎn)換為文本(TXT)的代碼步驟

    C#利用Spire.XLS for .NET將Excel轉(zhuǎn)換為文本(TXT)的代碼步驟

    在數(shù)據(jù)處理場景中,使用C#將Excel轉(zhuǎn)換為文本(TXT) 是常見需求,開發(fā)者往往遇到手動轉(zhuǎn)換效率低下、多Sheet數(shù)據(jù)難以整合、格式丟失等問題,本文基于Spire.XLS for .NET,分享完整代碼和步驟,解決Excel轉(zhuǎn)文本的痛點(diǎn),需要的朋友可以參考下
    2026-03-03
  • C#中的yield關(guān)鍵字詳解

    C#中的yield關(guān)鍵字詳解

    本文詳細(xì)講解了C#中的yield關(guān)鍵字,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C#中的IDisposable模式用法詳解

    C#中的IDisposable模式用法詳解

    這篇文章主要介紹了C#中的IDisposable模式用法,講述了垃圾資源回收機(jī)制的實(shí)現(xiàn),并對比分析了Dispose()方法、~DisposableClass()析構(gòu)函數(shù)、虛方法Dispose(bool disposing)的原理,需要的朋友可以參考下
    2014-09-09
  • C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    C#中Winform獲取文件路徑的方法實(shí)例小結(jié)

    這篇文章主要介紹了C#中Winform獲取文件路徑的方法,以實(shí)例形式較為詳細(xì)的總結(jié)了WinForm關(guān)于路徑操作的常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • c#判斷email地址是否為合法

    c#判斷email地址是否為合法

    輸入email地址使用c#語言檢測出email地址是否是合法的,這篇文章主要介紹了c#判斷email地址是否為合法的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • C#代碼實(shí)現(xiàn)添加或讀取Excel公式的完整指南

    C#代碼實(shí)現(xiàn)添加或讀取Excel公式的完整指南

    在日常的辦公數(shù)據(jù)處理任務(wù)中,Excel 公式和函數(shù)是自動化計(jì)算和數(shù)據(jù)分析的基石,本文將借助 Free Spire.XLS for .NET 這款輕量級且免費(fèi)的組件,詳細(xì)演示如何使用 C# 實(shí)現(xiàn) Excel 公式的添加與讀取操作,感興趣的小伙伴可以了解下
    2026-05-05
  • C#使用Lambda表達(dá)式簡化代碼的示例詳解

    C#使用Lambda表達(dá)式簡化代碼的示例詳解

    Lambda,希臘字母λ,在C#編程語言中,被引入為Lambda表達(dá)式,表示為匿名函數(shù)(匿名方法)。本文將利用Lambda表達(dá)式進(jìn)行代碼的簡化,感興趣的可以了解一下
    2022-12-12

最新評論

新宁县| 临漳县| 城步| 乌鲁木齐县| 淅川县| 肥城市| 安康市| 榆中县| 赣榆县| 宜宾县| 蓬溪县| 益阳市| 大埔县| 莆田市| 鄂尔多斯市| 天长市| 沭阳县| 镇沅| 江华| 海宁市| 保靖县| 尉氏县| 定安县| 介休市| 巴楚县| 宜城市| 常宁市| 米泉市| 蛟河市| 玛沁县| 凤阳县| 靖边县| 松阳县| 东山县| 清苑县| 大埔县| 习水县| 金乡县| 东台市| 颍上县| 内黄县|