我目前正在为我工作的公司申请。此应用程序的一部分处理差异报告,并在创建新的差异编号时发送电子邮件。首先,重要的是要意识到我正在将这个应用程序从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;
}
}
}
答案 0 :(得分:0)
平面文件配置文件没有任何问题。这真的取决于你的用例。文件中的电子邮件多久更改一次?有几个条目?应用程序的用户是否编辑列表?是否有任何复杂的规则,不同的地址将被发送不同的电子邮件?
如果这只是一个经常不变的简单邮件列表,那么使用xml文件可能就好了。您也可以创建一个发送到的电子邮件分发列表,例如ApplicationDiscrepancyReport。这样您就可以管理活动目录中的收件人。如果您坚持使用XML电子邮件地址,至少我会尝试摆脱位于文件共享上的xml文件的硬编码路径。
如果电子邮件地址发生了很大变化,并且应用程序的用户对其进行了更改,我建议将其移至SQL数据库。如果收件人列表经常更改,您可能还想添加跟踪这些地址的编辑时间。