/// <summary> /// Sends the email. /// </summary> /// <param name="emailAddresses">A string array of email addresses to send.</param> /// <param name="senderEmailAddress">The sender's email address</param> /// <param name="grid">The grid.</param> /// <returns>Number of email's sent</returns> /// <remarks>This asynchronous method are logged at Windows EventLog (Application category) if any error. </remarks> public static int SendEmail(string[] emailAddresses, string senderEmailAddress, Grid grid) { StringBuilder sb = new StringBuilder(string.Empty); sb.Append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">"); // Render header for rows if more then 1 row. if (grid.Rows.Count > 1) { sb.Append("<tr>"); foreach (Column column in grid.Columns) { if (column.Visibility == Visibility.Both || column.Visibility == Visibility.Grid) { sb.AppendFormat("<td>{0}</td>", column.Title); } } sb.Append("</tr>"); } Mail wgmail = new Mail(); ArrayList attachments = new ArrayList(); // Render column foreach row if one row, else render all columns in one row. foreach (Row gridrow in grid.Rows) { if (gridrow == null) { continue; } if (grid.Rows.Count > 1) { sb.Append("<tr>"); } foreach (Column column in gridrow.Columns) { if (column.Visibility == Visibility.None || column.ColumnType == ColumnType.Chart || column.ColumnType == ColumnType.SystemColumn) { continue; } if (column.ColumnType == ColumnType.File && grid.Rows.Count == 1) { File attachcolumn = (File)column; Attachment attachfile = new Attachment(attachcolumn.AbsoluteDirectoryFileName(gridrow[column.ColumnId]).Replace("NULL", grid.InternalId), "UUEncode"); attachments.Add(attachfile); continue; } object value = gridrow[column.ColumnId].Value; if (column.ColumnType == ColumnType.ColumnTemplate) { if (grid.DisplayView == DisplayView.Detail && ((ColumnTemplate)column).DetailViewTemplate != null) { value = ((ColumnTemplate)column).RenderTemplate(gridrow[column.ColumnId]); } else if (grid.DisplayView == DisplayView.Grid && ((ColumnTemplate)column).GridViewTemplate != null) { value = ((ColumnTemplate)column).RenderTemplate(gridrow[column.ColumnId]); } } switch (column.ColumnType) { case ColumnType.Foreignkey: { RowCollection row = ((Foreignkey)column).Table.Rows; for (int i = 0; i < row.Count; i++) { if (row[i][column.ColumnId].Value == null || row[i].PrimaryKeyUpdateValues != row[i][column.ColumnId].Value.ToString()) { continue; } value = Foreignkey.BuildDisplayText(i, ((Foreignkey)column).ValueColumn, ((Foreignkey)column).Table); break; } } break; case ColumnType.ManyToMany: { value = string.Empty; ManyToManyCollection items = ((ManyToMany)column).LoadItems(gridrow[column.ColumnId]); for (int i = 0; i < items.Count; i++) { if (items[i].Checked) { if (value == null) { value = items[i].DisplayText; } else { value += string.Format(" , {0}", items[i].DisplayText); } } } } break; } if ((column.Visibility == Visibility.Both || column.Visibility == Visibility.Grid) && grid.Rows.Count > 1) { sb.AppendFormat("<td>{0}</td>", value); } else if ((column.Visibility == Visibility.Both || column.Visibility == Visibility.Detail) && grid.Rows.Count == 1) { if (!column.HideDetailTitle) { sb.AppendFormat("<tr><td><b>{0}</b></td></tr><tr><td>{1}</td></tr>", column.Title, value); } else { sb.AppendFormat("<tr><td></td></tr><tr><td>{0}</td></tr>", value); } } } sb.Append("</tr>"); } sb.Append("</table>"); string smtpserver = GridConfig.Get("WGSMTPSERVER", (string)null); if (grid.MailForm.SmtpServer != null) { smtpserver = grid.MailForm.SmtpServer; } string body = sb.ToString(); int sentemails = 0; foreach (string emailaddress in emailAddresses) { if (!ValidEmail(emailaddress)) { continue; } sentemails++; MailMessage message = new MailMessage(new MailAddress(emailaddress), new MailAddress(emailaddress)); for (int i = 0; i < attachments.Count; i++) { message.Attachments.Add((Attachment)attachments[i]); } message.IsBodyHtml = true; message.From = string.IsNullOrEmpty(senderEmailAddress) == false ? new MailAddress(senderEmailAddress) : new MailAddress(emailaddress); message.Subject = grid.MailForm.Subject ?? grid.Title; message.Body = HttpUtility.HtmlDecode(body); wgmail.SendEmail(message, smtpserver); } return(sentemails); }