async Task <string> GenerateInbox() { var r = new StringBuilder(); var emails = await GetEmails(); r.AppendLine("<h2>Emails sent to <u>" + To.Or("ALL") + "</u></h2>"); r.AppendLine("<table cellspacing='0'>"); r.AppendLine("<tr>"); r.AppendLine("<th>Date</th>"); r.AppendLine("<th>Time</th>"); r.AppendLine("<th>From</th>"); r.AppendLine("<th>ReplyTo</th>"); r.AppendLine("<th>To</th>"); r.AppendLine("<th>Cc</th>"); r.AppendLine("<th>Bcc</th>"); r.AppendLine("<th>Subject</th>"); r.AppendLine("<th>Attachments</th>"); r.AppendLine("</tr>"); if (emails.None()) { r.AppendLine("<tr>"); r.AppendLine("<td colspan='8'>No emails in the system</td>"); r.AppendLine("</tr>"); } else { foreach (var item in emails) { r.AppendLine("<tr>"); r.AddFormattedLine("<td>{0}</td>", item.SendableDate.ToString("yyyy-MM-dd")); r.AddFormattedLine("<td>{0}</td>", item.SendableDate.ToSmallTime()); r.AddFormattedLine("<td>{0}</td>", item.GetEffectiveFromName() + "(" + item.GetEffectiveFromAddress() + ")"); r.AddFormattedLine("<td>{0}</td>", item.GetEffectiveReplyToName() + "(" + item.GetEffectiveReplyToAddress() + ")"); r.AddFormattedLine("<td>{0}</td>", item.To); r.AddFormattedLine("<td>{0}</td>", item.Cc); r.AddFormattedLine("<td>{0}</td>", item.Bcc); r.AddFormattedLine("<td><a href='/?Web.Test.Command=testEmail&id={0}&to={1}&ReturnUrl={2}'>{3}</a></td>", item.GetId(), To, ReturnUrl.UrlEncode(), item.Subject.Or("[NO SUBJECT]").HtmlEncode()); r.AddFormattedLine("<td>{0}</td>", GetAttachmentLinks(item)); r.AppendLine("</tr>"); } } r.AppendLine("</table>"); return(r.ToString()); }
async Task <string> GetAttachmentLinks(IEmailQueueItem email) { return((await email.Attachments.OrEmpty().Split('|').Trim() .Select(async f => $"<form action='/?Web.Test.Command=testEmail&To={To}&ReturnUrl={ReturnUrl.UrlEncode()}' " + $"method='post'><input type=hidden name='attachmentInfo' value='{f.HtmlEncode()}'/><a href='#' " + $"onclick='this.parentElement.submit()'>{(await EmailService.ParseAttachment(f))?.Name.HtmlEncode()}</a></form>") .AwaitAll()).ToString("")); }