【问题标题】:XmlReader Other OptionsXmlReader 其他选项
【发布时间】:2017-02-15 21:23:17
【问题描述】:

我目前正在为我工​​作的公司处理申请。此应用程序的一部分处理差异报告并在创建新的差异编号时发送电子邮件。首先,重要的是要意识到我正在将此应用程序从 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;
        }
    }
}

【问题讨论】:

  • 有效吗?保留它并继续其他更高优先级的选项。请花时间格式化您的代码 - 谢谢:)
  • 我确实格式化了代码。我的印象是必须在 4 个空格中添加标签。它可以工作,但是我无法访问该文件。它说它不存在,但它确实存在。
  • 多人同时使用的任何数据都应存储在数据库中,因为 Windows 上的文件共享可能会导致问题。数据库库旨在处理多个用户同时尝试使用相同数据时的冲突。

标签: c# xml winforms


【解决方案1】:

平面文件配置文件不一定有任何问题。这实际上取决于您的用例。文件中的电子邮件多久更改一次?有多少条目?应用程序的用户是否编辑列表?是否有任何复杂的规则可以让不同的地址收到不同的电子邮件?

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

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

【讨论】:

  • 感谢所有回复。电子邮件地址没有太大变化,但我正在考虑。有些人将在该列表中的某个时间退休或出于任何原因退出。我的想法是能够为管理人员提供一种更新该列表的简单方法。根据用户在表单中输入的内容,分发列表会发生不同的变化。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2020-05-06
  • 2015-08-07
相关资源
最近更新 更多