填充电子邮件正文中的项目列表
本文关键字:项目 列表 电子邮件 正文 填充 | 更新日期: 2023-09-27 18:30:41
我正在尝试通过我的emial安装程序类填充电子邮件正文中的项目列表。 当我尝试在Outlook中打开电子邮件时,我只能看到一个项目,我需要项目列表。
以下是我的代码:
public class EmailSetup
{
string toEmailSetup = string.Empty;
string fromEmailSetup = string.Empty;
string domainName = string.Empty;
string emailServer = string.Empty;
public void ApplicationFailedEmailSetup(List<string>ApplicationsInactive,DateTime dateRun)
{
toEmailSetup = ConfigurationManager.AppSettings["To mailid"];
fromEmailSetup = ConfigurationManager.AppSettings["From mailid"];
domainName = ConfigurationManager.AppSettings["Domain Name"];
emailServer = ConfigurationManager.AppSettings["Email Server"];
try
{
var messager = new MailMessage();
messager.To.Add(toEmailSetup);
messager.Subject = "Applications Crashed/Closed";
messager.From = new MailAddress(fromEmailSetup);
try
{
messager.Body = "Following applications you are monitoring are closed are crashed:";
**foreach (var item in ApplicationsInactive)
{
messager.Body = item;
}** // Here i am trying to populate list of applications.
}
catch (Exception)
{
throw;
}
var smtp = new SmtpClient(emailServer);
smtp.EnableSsl = true;
try
{
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Send(messager);
}
catch (Exception)
{
throw;
}
}
catch (SmtpException ex)
{
throw new ApplicationException
("SmtpException has occured: " + ex.Message);
}
}
}
循环中的这一行是问题所在:
messager.Body = item;
您每次都会覆盖 Body
属性,因此循环之后只会覆盖最后一项。 您希望改为追加:
messager.Body += item;
当然,还有更多的方法可以做到这一点,而这个方法实际上有点草率。 查看创建格式化字符串和构建电子邮件正文的 StringBuilder
类,然后只需将电子邮件正文设置为 StringBuilder
对象的.ToString()
即可。
另外,作为旁注,此代码没有任何用途:
catch (Exception)
{
throw;
}
如果您实际上没有以任何有意义的方式处理异常,为什么要捕获它呢? 代码将引发异常,因此只需让它引发异常即可。 绝对没有理由在这里捕获它,这只是在代码中产生噪音。
此外,这个也很糟糕:
catch (SmtpException ex)
{
throw new ApplicationException
("SmtpException has occured: " + ex.Message);
}
您正在禁止显示原始异常并创建一个全新的异常。 您将丢失堆栈跟踪以及原始异常中的任何其他有用信息。 是否有特殊原因要将 SmtpException
s 转换为 ApplicationException
s? 至少,将ApplicationException
的 InnerException
属性设置为SmtpException
,以免完全丢失该信息。
但是,更重要的是,就像上面一样,您实际上并没有以任何有意义的方式处理异常。 没有向其添加上下文,没有进行日志记录,并且您仍然抛出异常。 同样,这只是代码中的噪声。 如果您不打算实际处理异常,则没有理由捕获异常。
您当前的代码在每次迭代中覆盖主体,为其分配每个项 - 导致最后一项是主体。
您需要改为附加到正文:
messager.Body = "Following applications you are monitoring are closed are crashed:";
messager.Body += string.Join(", ", ApplicationsInactive);
请注意 += 运算符,而不仅仅是 =。
此外,您根本不需要循环 - 只需使用 string
类的方便的 Join()
方法,即可使用越来越少的可读代码获得相同的结果。