using System; using System.Web; using System.Xml; using System.Xml.XPath; using System.Text; using System.Web.Mail; using System.IO; namespace umbraco.standardFormhandlers { /// /// Summary description for Class1. /// public class formMail : interfaces.IFormhandler { /// /// Initializes a new instance of the class. /// public formMail() { // // TODO: Add constructor logic here // } #region IFormhandler Members private int _redirectID = -1; /// /// Executes the specified formhandler node. /// /// The formhandler node. /// public bool Execute(XmlNode formhandlerNode) { StringBuilder builder = new StringBuilder(); XmlDocument document = new XmlDocument(); document.LoadXml(""); if (helper.Request("umbHeader") != "") { builder.Append(helper.Request("umbheader")); } foreach (string text in HttpContext.Current.Request.Form.Keys) { if (text.StartsWith("umbForm")) { builder.Append("\n\n" + text.Replace("umbForm", "") + ": " + HttpContext.Current.Request.Form[text]); document.DocumentElement.AppendChild(xmlHelper.addCDataNode(document, text.Replace("umbForm", ""), HttpContext.Current.Request.Form[text])); } } if (helper.Request("umbFooter") != "") { builder.Append(helper.Request("umbFooter")); } string subject = helper.Request("umbSubject"); if (subject.Trim() == "") { subject = formhandlerNode.SelectSingleNode("//parameter [@alias='subject']").FirstChild.Value; } if (helper.Request("umbFormNoXml") != "") { document = null; } this.sendMail(formhandlerNode.SelectSingleNode("//parameter [@alias='sender']").FirstChild.Value, HttpContext.Current.Request.Form["sendTo"], subject, builder.ToString(), formhandlerNode.SelectSingleNode("//parameter [@alias='debug']").FirstChild.Value, document); if (helper.Request("umbExtraMailTo") != "") { this.sendMail(formhandlerNode.SelectSingleNode("//parameter [@alias='sender']").FirstChild.Value, helper.Request("umbExtraMailto"), subject, builder.ToString(), formhandlerNode.SelectSingleNode("//parameter [@alias='debug']").FirstChild.Value, document); } string redir = HttpContext.Current.Request["umbracoRedirect"].ToString(); if ((redir != null) && (redir != "")) { this._redirectID = Convert.ToInt32(redir); } return true; } /// /// Gets the redirect ID. /// /// The redirect ID. public int redirectID { get { // TODO: Add formMail.redirectID getter implementation return _redirectID; } } #endregion private void sendMail(string From, string To, string Subject, string Body, string Debug, XmlDocument XmlDoc) { System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(From, To); message.Subject = Subject; message.Body = Body; Guid guid = Guid.NewGuid(); string fileName = HttpContext.Current.Server.MapPath(GlobalSettings.StorageDirectory) + @"\" + guid.ToString() + ".xml"; if (XmlDoc != null) { FileStream stream = File.Open(fileName, FileMode.Create); StreamWriter writer = new StreamWriter(stream); writer.WriteLine(XmlDoc.OuterXml); writer.Close(); stream.Close(); message.Attachments.Add(new System.Net.Mail.Attachment(fileName)); } System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient(); try { smtpClient.Send(message); if (Debug == "true") { HttpContext.Current.Response.Write(string.Concat(new string[] { "" })); } HttpContext.Current.Trace.Write("sendMail", string.Concat(new string[] { "Mail send from ", message.From.Address, " to ", message.To[0].Address, " through ", GlobalSettings.SmtpServer })); } catch (Exception exception) { HttpContext.Current.Trace.Warn("sendMail", string.Concat(new string[] { "Error sending mail from ", message.From.Address, " to ", message.To[0].Address, " through ", GlobalSettings.SmtpServer, "." }), exception); if (Debug == "true") { string exp = ""; while (exception.InnerException != null) { exp = exp + "--------------------------------\n"; exp = exp + exception.InnerException.ToString() + ", \n"; exception = exception.InnerException; } HttpContext.Current.Response.Write(string.Concat(new string[] { "" })); } return; } finally { if (XmlDoc != null) { File.Delete(fileName); } } } } }