XmlReader其他选项

时间:2017-02-15 21:23:17

标签: c# xml winforms

我目前正在为我工​​作的公司申请。此应用程序的一部分处理差异报告,并在创建新的差异编号时发送电子邮件。首先,重要的是要意识到我正在将这个应用程序从VB.NET重新开发到C#。在旧应用程序中,开发人员选择读取一些XML文件以获取一些电子邮件地址。除非XML文件充满了信息,否则我已阅读使用备用选项。这不是一个固执己见的问题,如果这听起来像是一个抱歉。但是,我正在寻找正确的方法。这些电子邮件地址是应该保存在数据库表中以便于添加/删除,还是有更标准化的方法来执行此操作?请在下面找到当前的代码。

public void PrepareEmail(string subject, string message)
{

    if (MessageBox.Show(@"Are you sure you want to save and send Discrepancy Report: " + tbxDRNumber.Text + @"?\n Click YES to save\n Click NO to cancel", @"Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
    {

        SendEmail(subject, message);
    }
}

public Array AddEmail()
{

    string[] dRemail = { "", "", "" };

    if (File.Exists(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml"))
    {
        XmlReader emailDocument = new XmlTextReader(@"\\fs01\Applications\EMS-Manager\DREmailAddresses.xml");

        while (emailDocument.Read())
        {
            var type = emailDocument.NodeType;

            switch (type)
            {
                case XmlNodeType.Element:
                    if (emailDocument.Name == "DRCreatedAddEmail")
                    {
                        dRemail[0] = emailDocument.ReadInnerXml();
                    }
                    if (emailDocument.Name == "DRActionNeededAddEmail")
                    {
                        dRemail[1] = emailDocument.ReadInnerXml();
                    }
                    if (emailDocument.Name == "DRPendingAddEmail")
                    {
                        dRemail[2] = emailDocument.ReadInnerXml();
                    }
                    else
                    {
                        MessageBox.Show(@"The file: 'DREmailAddresses.xml' was not found at: \\fs01\Applications\EMS-Manager");
                    }
                    break;
            }
        }
    }

    return dRemail;
}

public void SendEmail(string subjectText, string bodyText)
{

    string[] email = (string[])AddEmail();
    //object oOutlook = default(Microsoft.Office.Interop.Outlook.Application);
    var oMessage = default(MailItem);
    Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application"));

    if (subjectText == "New Discrepancy Created. DR" + tbxDRNumber.Text + "  ")
    {
        oMessage.To = email[0];
        oMessage.Subject = subjectText;
        oMessage.HTMLBody = bodyText;

        try
        {
            oMessage.Send();
        }
        catch (System.Exception e)
        {
            MessageBox.Show(@"Send Failed with error: " + e);
            throw;
        }
    }
    else if (subjectText == tbxDRNumber.Text + " - Action Needed")
    {
        oMessage.To = email[1];
        oMessage.Subject = subjectText;
        oMessage.HTMLBody = bodyText;

        try
        {
            oMessage.Send();
        }
        catch (System.Exception e)
        {
            MessageBox.Show(@"Send Failed with error: " + e);
            throw;
        }
    }
    else if (subjectText == tbxDRNumber.Text + "DR Pending Approval")
    {
        oMessage.To = email[2];
        oMessage.Subject = subjectText;
        oMessage.HTMLBody = bodyText;

        try
        {
            oMessage.Send();
        }
        catch (System.Exception e)
        {
            MessageBox.Show(@"Send Failed with error: " + e);
            throw;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

平面文件配置文件没有任何问题。这真的取决于你的用例。文件中的电子邮件多久更改一次?有几个条目?应用程序的用户是否编辑列表?是否有任何复杂的规则,不同的地址将被发送不同的电子邮件?

如果这只是一个经常不变的简单邮件列表,那么使用xml文件可能就好了。您也可以创建一个发送到的电子邮件分发列表,例如ApplicationDiscrepancyReport。这样您就可以管理活动目录中的收件人。如果您坚持使用XML电子邮件地址,至少我会尝试摆脱位于文件共享上的xml文件的硬编码路径。

如果电子邮件地址发生了很大变化,并且应用程序的用户对其进行了更改,我建议将其移至SQL数据库。如果收件人列表经常更改,您可能还想添加跟踪这些地址的编辑时间。