设为首页 收藏本站
查看: 755|回复: 0

[经验分享] exchange file

[复制链接]

尚未签到

发表于 2015-9-11 06:02:36 | 显示全部楼层 |阅读模式
  using System;
using System.Data;
using System.Configuration;
using System.Web;
using Obx.Core.BusinessObjects;
using Obx.Core.Security;
using System.Net.Mail;
using System.Text;
using System.Xml;
using System.IO;
using System.Collections.Specialized;
using System.Collections.Generic;
using Obx.Common.Messaging.EMail.POP3;
//using Obx.Common.Messaging.Exchange;
using System.Text.RegularExpressions;
using System.Net;
namespace EmailParseBusinessTask
{
    public class EmailParseBusinessTask : BusinessTask, ICustomTask, ISetTaskProperties
    {
        #region BusinessTask Members
  private string EmailAddress = String.Empty;
        private string Username = String.Empty;
        private string Password = String.Empty;
        private string EmailType=String.Empty;
        private string Host = String.Empty;
        private int Port = 25;
        private bool EnableSSL = false;
        private string DoMain = String.Empty;
        private BusinessObject Requests = Broker.Objects["Requests"];
        private BusinessObject emailBO = Broker.Objects["Email"];
        private BusinessObjectQuery query = new BusinessObjectQuery();
        public override void ProcessTask(BusinessObjectInstance caller)
        {
            //<data>
            //<EmailAddress></EmailAddress>
            //<Username></Username>
            //<Password></Password>
            //<EmailType>POP|Exchange</EmailType>
            //<Host></Host>
            //<Port></Port>
            //<EnableSSL></EnableSSL>
            //<DoMain></DoMain>
            //</data>
            if (caller == null || (caller != null && caller.Bo.ID == this.BusinessObjectID))
            {
                XmlDocument TaskXML = new XmlDocument();
                TaskXML.LoadXml(this.TaskData);
                EmailAddress = TaskXML.GetElementsByTagName("EmailAddress")[0].InnerText;
                Username = TaskXML.GetElementsByTagName("Username")[0].InnerText;
                Password = TaskXML.GetElementsByTagName("Password")[0].InnerText;
                EmailType = TaskXML.GetElementsByTagName("EmailType")[0].InnerText;
                Host = TaskXML.GetElementsByTagName("Host")[0].InnerText;
               
                List<emailMessage> mails = new List<emailMessage>();
                switch(EmailType)
                {
                    case"POP":
                        Port =int.Parse(TaskXML.GetElementsByTagName("Port")[0].InnerText);
                        EnableSSL = bool.Parse(TaskXML.GetElementsByTagName("EnableSSL")[0].InnerText);
                        mails = GetEmailsFromSMTPServer(Host, Username, Password, Port, EnableSSL);
                        break;
                    case"Exchange":
                        DoMain = TaskXML.GetElementsByTagName("DoMain")[0].InnerText;
                        mails = GetEmailsFromExchangeServer(Host, DoMain, Username, Password);
                        break;
                }
                foreach (emailMessage e in mails)
                {
                    if (e.subject.Contains("Request Number "))
                    {
                        query = new BusinessObjectQuery();
                        query.QueryRows.Add(new QueryLine("RequestID", "equal", e.subject.Substring(e.subject.IndexOf("Request Number ") + 15)));
                        DataTable result = Requests.SelectRecords(query);
                        if (result.Rows.Count > 0)
                        {
                            foreach (DataRow r in result.Rows)
                            {
                                ModifyRequest(e, r["__RowID__"].ToString());
                            }
                        }
                        else
                        {
                            CreateNewRequest(e);
                        }
                    }
                    else
                    {
                        CreateNewRequest(e);
                    }
                }
  }
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="email"></param>
        private void CreateNewRequest(emailMessage email)
        {
            BusinessObjectInstance newInstance = Requests.CreateInstance();
            newInstance.LoadSchema();
            newInstance["RequestFromEmail"] = email.from;
            newInstance["RequestName"] = email.subject;
            newInstance["RequestDescription"] = email.body;
            newInstance["CreatedBy"] = email.from;
            newInstance["CreatedDate"] = DateTime.Now;
            newInstance["LastUpdatedBy"] = email.from;
            newInstance["LastUpdate"] = DateTime.Now;
            newInstance["Status"] = "New";
            newInstance["InternalStatus"] = "New";
            try
            {
                query = new BusinessObjectQuery();
                query.QueryRows.Add(new QueryLine("Email", "equal", email.from));
                DataTable result = Broker.Objects["Contact"].SelectRecords(query);
                if (result.Rows.Count > 0)
                {
                    newInstance["Company"] = result.Rows[0]["Company"];
                    newInstance["FirstName"] = result.Rows[0]["FName"];
                    newInstance["LastName"] = result.Rows[0]["LName"];
                    newInstance["PhoneNumber"] = result.Rows[0]["BPhone"];
                    newInstance["SalesRep"] = result.Rows[0]["FSaleRep"];
                }
            }
            catch { }
            newInstance.CreateNew(true);
            switch (EmailType)
            {
                case "POP":
                    if (email.attachments != "" && email.attachments != " ")
                    {
                        byte[] byteFile = null;
                        byteFile = Convert.FromBase64String(email.attachments);
                        FileAttachment file = new FileAttachment(DateTime.Now, email.displayname, DateTime.Now, email.displayname, "", email.attachmentName, byteFile, Requests, newInstance.RecordID);
                        newInstance.SaveFileAttachment(file);
                    }
                    break;
                case "Exchange":
                    if (email.attachmentByte != null)
                    {
                        FileAttachment file = new FileAttachment(DateTime.Now, email.displayname, DateTime.Now, email.displayname,"", email.attachmentName,email.attachmentByte,Requests, newInstance.RecordID);
                        newInstance.SaveFileAttachment(file);
                    }
                    break;
            }
        }
  private void ModifyRequest(emailMessage email, string RecordID)
        {
            BusinessObjectInstance instance = Requests.CreateInstance(RecordID.Replace('[', '\x01').Replace(']', '\x02'), true);
            instance.ForEdit = true;
            instance["LastUpdatedBy"] = email.from;
            instance["LastUpdate"] = DateTime.Now;
            instance.SaveRecord(false);
            instance.ForEdit = false;
            BusinessObjectInstance emailInstance = Requests.Children["Email"].CreateInstance();
            emailInstance.LoadSchema();
            emailInstance["ESubject"] = email.subject;
            emailInstance["EBody"]=email.body;
            emailInstance["EFrom"]=email.from;
            emailInstance["ETo"]=email.to;
            emailInstance["ERSTime"]=email.date;
            emailInstance.CreateNew(false);
  BusinessObjectRelation relation=Requests.ChildrenRelationship[Requests,Requests.Children["Email"]];
            relation.InsertMapInfo(instance, emailInstance);
        }
  
        /// <summary>
        ///
        /// </summary>
        /// <param name="server"></param>
        /// <param name="domain"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private List<emailMessage> GetEmailsFromExchangeServer(string server, string domain, string username, string password)
        {
            List<emailMessage> ReturnList = new List<emailMessage>();
            try
            {
                ExUser ExchangeUser = new ExUser(server, username, password, domain);
                ExInBox Inbox = new ExInBox(ExchangeUser);
                ExMailMessage[] message = Inbox.GetMessageListFromInbox();
                if (message.Length > 0)
                {
                    for (int i = 0; i < message.Length; i++)
                    {
                        emailMessage tmp = new emailMessage();
                        tmp.mailindex = i+1;
                        tmp.subject = message.Subject;
                        tmp.date = message.Date;
                        tmp.body = message.Body;
                        //tmp.attachments=message[0].Url
                        string from = message.From;
                        if(from.Contains("<"))
                            from = from.Substring(from.IndexOf('<') + 1, from.IndexOf('>') - 1 - from.IndexOf('<'));
                        tmp.from = from;
                        tmp.displayname = from;
                        string to = message.To;
                        if (to.Contains("<"))
                            to = to.Substring(to.IndexOf('<') + 1, to.IndexOf('>') - 1 - to.IndexOf('<'));
                        tmp.to = to;
                        tmp.displaytoname = to;
                        if (message.HasAttachment)
                        {
                            try
                            {
                                Attachment attach = GetAttachment(message, domain, username, password);
                                if (attach != null)
                                {
                                    tmp.attachmentByte = attach.attachmentByte;
                                    tmp.attachmentName = attach.attachmentName;
                                }
                            }
                            catch(Exception ex)
                            { }
                        }
                        ReturnList.Add(tmp);
                        Inbox.DeleteMessage(message.Url);
                    }
                }
            }
            catch(Exception e)
            {}
            return ReturnList;
        }
        #region
        private Attachment GetAttachment(ExMailMessage mailMessage, string domain, string username, string password)
        {
            // Variables.
            Attachment result = null;
            System.Net.HttpWebRequest Request;
            System.Net.WebResponse Response;
            System.Net.CredentialCache MyCredentialCache;
            System.IO.Stream ResponseStream = null;
            System.Xml.XmlDocument ResponseXmlDoc = null;
            System.Xml.XmlNode root = null;
            System.Xml.XmlNamespaceManager nsmgr = null;
            System.Xml.XmlNodeList PropstatNodes = null;
            System.Xml.XmlNodeList HrefNodes = null;
            System.Xml.XmlNode StatusNode = null;
            System.Xml.XmlNode PropNode = null;
  string[] _attachmentName = null;
            string[] _realAttachmentName = null;
            System.Xml.XmlNode NameNode = null;
            try
            {
                // Create a new CredentialCache object and fill it with the network
                // credentials required to access the server.
                MyCredentialCache = new System.Net.CredentialCache();
                MyCredentialCache.Add(new System.Uri(mailMessage.Url),
                    "NTLM",
                    new System.Net.NetworkCredential(username, password, domain)
                    );
  // Create the HttpWebRequest object.
                Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(mailMessage.Url);
  // Add the network credentials to the request.
                Request.Credentials = MyCredentialCache;
  // Specify the method.
                Request.Method = "X-MS-ENUMATTS";
  // Send the X-MS-ENUMATTS method request and get the
                // response from the server.
                Response = (HttpWebResponse)Request.GetResponse();
  // Get the XML response stream.
                ResponseStream = Response.GetResponseStream();
  // Create the XmlDocument object from the XML response stream.
                ResponseXmlDoc = new System.Xml.XmlDocument();
  // Load the XML response stream.
                ResponseXmlDoc.Load(ResponseStream);
  // Get the root node.
                root = ResponseXmlDoc.DocumentElement;
  // Create a new XmlNamespaceManager.
                nsmgr = new System.Xml.XmlNamespaceManager(ResponseXmlDoc.NameTable);
  // Add the DAV: namespace, which is typically assigned the a: prefix
                // in the XML response body.  The namespaceses and their associated
                // prefixes are listed in the attributes of the DAV:multistatus node
                // of the XML response.
                nsmgr.AddNamespace("a", "DAV:");
  // Add the http://schemas.microsoft.com/mapi/proptag/ namespace, which
                // is typically assigned the d: prefix in the XML response body.
                nsmgr.AddNamespace("d", "http://schemas.microsoft.com/mapi/proptag/");
                nsmgr.AddNamespace("e", "urn:schemas:httpmail:");
                // Use an XPath query to build a list of the DAV:propstat XML nodes,
                // corresponding to the returned status and properties of
                // the file attachment(s).
                PropstatNodes = root.SelectNodes("//a:propstat", nsmgr);
  // Use an XPath query to build a list of the DAV:href nodes,
                // corresponding to the URIs of the attachement(s) on the message.
                // For each DAV:href node in the XML response, there is an
                // associated DAV:propstat node.
                HrefNodes = root.SelectNodes("//a:href", nsmgr);
  // Attachments found?
                if (HrefNodes.Count > 0)
                {
                    _attachmentName = new string[HrefNodes.Count];
                    _realAttachmentName = new string[HrefNodes.Count];
                    // Display the number of attachments on the message.
                    // Iterate through the attachment properties.
                    for (int i = 0; i < HrefNodes.Count; i++)
                    {
                        // Use an XPath query to get the DAV:status node from the DAV:propstat node.
                        StatusNode = PropstatNodes.SelectSingleNode("a:status", nsmgr);
  // Check the status of the attachment properties.
                        if (StatusNode.InnerText != "HTTP/1.1 200 OK")
                        {
                            return null;
                        }
                        else
                        {
                            // Get the CdoPR_ATTACH_FILENAME_W MAPI property tag,
                            // corresponding to the attachment file name.  The
                            // http://schemas.microsoft.com/mapi/proptag/ namespace is typically
                            // assigned the d: prefix in the XML response body.
                            NameNode = PropstatNodes.SelectSingleNode("a:prop/d:x3704001f", nsmgr);
                            // Get the CdoPR_ATTACH_SIZE MAPI property tag,
                            // corresponding to the attachment file size.
                            PropNode = PropstatNodes.SelectSingleNode("a:prop/d:x0e200003", nsmgr);
                            string size;
                            if (Convert.ToInt32(PropNode.InnerText) > 1024 * 1224)
                            {
                                size = (Convert.ToInt32(PropNode.InnerText) / (1024 * 1024)).ToString() + "M";
                            }
                            else if (Convert.ToInt32(PropNode.InnerText) > 1024)
                            {
                                size = (Convert.ToInt32(PropNode.InnerText) / 1024).ToString() + "KB";
                            }
                            else
                            {
                                size = PropNode.InnerText + "B";
                            }
                            int index = HrefNodes.InnerText.LastIndexOf('/') + 1;
                            string attachmentName = HrefNodes.InnerText.Substring(index);
                            int mLastIndex = attachmentName.LastIndexOf('.');
                            string mMainName = attachmentName.Substring(0, mLastIndex);
                            //mMainName = Server.UrlDecode(mMainName);
                            int mExtLength = attachmentName.Length - mLastIndex;
                            string mExtName = attachmentName.Substring(mLastIndex, mExtLength);
                            string LAttachment= mailMessage.Url + "/" + mMainName +  mExtName ;
                            _attachmentName = mailMessage.Url + "/" + mMainName + mExtName + "/C58EA28C-18C0-4a97-9AF2-036E93DDAFB3/" + mMainName + mExtName + "?attach=1";
                            _realAttachmentName = PropstatNodes.SelectSingleNode("a:prop/e:attachmentfilename", nsmgr).InnerText;
                        }
                    }
  }
  // Clean up.
                ResponseStream.Close();
                Response.Close();
                result = this.GetAttachmentFile(mailMessage, domain, username, password, HrefNodes.Count, _attachmentName,_realAttachmentName);
            }
            catch (Exception ex)
            {
                // Catch any exceptions. Any error codes from the X-MS-ENUMATTS
                // method request on the server will be caught here, also.
  }
            return result;
        }
        private Attachment GetAttachmentFile(ExMailMessage mailMessage, string domain, string username, string password, int Count, string[] _attachmentName, string[] _realAttachmentName)
        {
            //_attachmentName[0] = "http://mail.blifax.com/Exchange/HongC/Inbox/blifax.com.EML/1_multipart_xF8FF_3_1.0.0.15.sql";
            Attachment attach = new Attachment();
            System.Net.HttpWebRequest Request;
            System.Net.WebResponse Response;
            System.Net.CredentialCache MyCredentialCache;
            Stream ResponseStream = null;
            try
            {
                for(int i=0;i<_attachmentName.Length;i++)
                {
                    // Create a new CredentialCache object and fill it with the network
                    // credentials required to access the server.
                    MyCredentialCache = new System.Net.CredentialCache();
                    MyCredentialCache.Add(new System.Uri(_attachmentName),
                        "NTLM",
                        new System.Net.NetworkCredential(username, password, domain)
                        );
  // Create the HttpWebRequest object.
                    Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(_attachmentName);
                    Request.UnsafeAuthenticatedConnectionSharing = true;
                    // Add the network credentials to the request.
                    Request.Credentials = MyCredentialCache;
  // Specify the method.
                    Request.Method = "GET";
  // Send the X-MS-ENUMATTS method request and get the
                    // response from the server.
                    Response = (HttpWebResponse)Request.GetResponse();
                    
                    // Get the XML response stream.
                    ResponseStream = Response.GetResponseStream();
  MemoryStream ms = new MemoryStream();
                    StreamReader sr = new StreamReader(ResponseStream);
                    byte[] buffer = new byte[256];
                    int count = ResponseStream.Read(buffer, 0, 256);
                    while (count > 0)
                    {
                        ms.Write(buffer, 0, count);
                        count = ResponseStream.Read(buffer, 0, 256);
                    }
                    byte[] bs = ms.ToArray();
                    attach.attachmentByte = bs;
                    attach.attachmentName = _realAttachmentName;
                    ResponseStream.Close();
                    Response.Close();
                }
                return attach;
            }
            catch(Exception e)
            {
                return attach;
            }
        }
        #endregion
        /// <summary>
        ///
        /// </summary>
        /// <param name="server"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="port"></param>
        /// <param name="ssl"></param>
        /// <returns></returns>
        private List<emailMessage> GetEmailsFromSMTPServer(string server, string username, string password, int port, bool ssl)
        {
            Obx.Common.Messaging.EMail.POP3.Pop3MailClient pop = new Pop3MailClient(server, port, ssl, username, password);
            List<emailMessage> messages = new List<emailMessage>();
            try
            {
                Regex date = new Regex(@"(?:Date:(?<date>.+))");
                Regex from = new Regex(@"(?:From:(?<from>.+))");
                Regex to = new Regex(@"(?:To:(?<to>.+))");
                Regex subject = new Regex(@"(?:Subject:(?<subject>.+))");
                Regex dateRegex = new Regex(@"\w+,(?<date>[^\+\-]+)[\+\-].+");
                Regex matchSubject = new Regex(@"\#+(?<name>[^\#]+)\#+(?<id>[^\#]+)\#\#+");
                string message = "";
  
                pop.Connect();
                pop.IsAutoReconnect = true;
                pop.ReadTimeout =180000;
                int NumberOfMails, MailboxSize;
                pop.GetMailboxStats(out NumberOfMails, out MailboxSize);
  if (NumberOfMails > 0)
                {
                    for (int i = 1; i <= NumberOfMails; i++)
                    {
                        emailMessage m = new emailMessage();
                        pop.GetRawEmail(i, out message);
  m.mailindex = i;
                        m.subject = subject.Match(message).Groups[1].Value;
                        try
                        {
                            m.date = Convert.ToDateTime(dateRegex.Match(date.Match(message).Groups[1].Value).Groups[1].Value);
                        }
                        catch
                        {
                            m.date = DateTime.Now;
                        }
                        m.body = GetEmailBody(message);
                        try
                        {
                            m.attachments = GetEmailAttachments(message, out m.attachmentName);
                        }
                        catch
                        { }
                        parsFrom(from.Match(message).Groups[1].Value, out m.displayname, out m.from);
                        parsTo(to.Match(message).Groups[1].Value, out m.displaytoname, out m.to);
                        messages.Add(m);
                    }
                    pop.DeleteEmail(1);
                }
                pop.Disconnect();
                return messages;
            }
            catch (Exception err)
            {
                pop.Disconnect();
                return messages;
            }
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private string GetEmailBody(string message)
        {
            string body = "";
            string code = "";
            string codeType = "7bit";
            try
            {
                body = message.Substring(message.IndexOf("Content-Transfer-Encoding:"));
                code = body.Substring(0, body.IndexOf("\r\n"));
  if (code.IndexOf("base64") >= 0)
                    codeType = "base64";
                body = body.Substring(body.IndexOf("\r\n\r\n") + 4);
                //if (body.IndexOf("\r\n\r\n--") > 0)
                //    body = body.Substring(0, body.IndexOf("\r\n\r\n--"));
                //else if (body.LastIndexOf("\r\n.\r\n") > 0)
                //    body = body.Substring(0, body.LastIndexOf("\r\n.\r\n"));
                if (body.IndexOf("\r\n--") > 0)
                    body = body.Substring(0, body.IndexOf("\r\n--"));
                else if (body.LastIndexOf("\r\n.") > 0)
                    body = body.Substring(0, body.LastIndexOf("\r\n."));
  body = body.Replace("Content-Disposition: inline\r\n", "");
                if (codeType == "base64" || message.IndexOf("charset=\"GB2312\"") > 0)
                {
                    return decodemail(body.Trim(), "gb2312");
                }
                else
                    return body;
            }
            catch (Exception err)
            {
                return "";
            }
            return message;
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        private string GetEmailAttachments(string message,out string name)
        {
            string body = "";
            string code = "";
            string codeType = "7bit";
            string fileName = "";
            try
            {
                //string str = message.Substring(message.IndexOf("Content-Type: text/plain; name="));
                string str = message.Substring(message.IndexOf("Content-Type: text/plain;"));
                if (str.Substring(str.IndexOf("Content-Transfer-Encoding:")).IndexOf("base64") >= 0)
                {
                    codeType = "base64";
                }
                body = message.Substring(message.IndexOf("Content-Disposition: attachment;"));
                fileName = message.Substring(message.IndexOf("Content-Disposition: attachment;"));
                fileName = fileName.Substring(fileName.IndexOf('=')+1, fileName.IndexOf("\r\n\r\n")-fileName.IndexOf('=')-1);
                fileName = fileName.Replace("\"", "");
                name = fileName;
                code = body.Substring(0, body.IndexOf("\r\n"));
                if (code.IndexOf("base64") >= 0)
                    codeType = "base64";
                body = body.Substring(body.IndexOf("\r\n\r\n") + 4);
                //if (body.IndexOf("\r\n\r\n--") > 0)
                //    body = body.Substring(0, body.IndexOf("\r\n\r\n--"));
                //else if (body.LastIndexOf("\r\n.\r\n") > 0)
                //    body = body.Substring(0, body.LastIndexOf("\r\n.\r\n"));
                if (body.IndexOf("\r\n--") > 0)
                    body = body.Substring(0, body.IndexOf("\r\n--"));
                else if (body.LastIndexOf("\r\n.") > 0)
                    body = body.Substring(0, body.LastIndexOf("\r\n."));
                body = body.Replace(code, "");
                if (codeType == "base64" || message.IndexOf("charset=\"GB2312\"") > 0)
                {
                    //return decodemail(body.Trim(), "gb2312");
                    return body.Trim();
                }
                else
                    return body;
            }
            catch (Exception err)
            {
                name = fileName;
                return " ";
            }
            return message;
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="from"></param>
        /// <param name="displayname"></param>
        /// <param name="email"></param>
        private void parsFrom(string from, out string displayname, out string email)
        {
            Regex r = new Regex(@"(?<name>[^""\<]+)[^\<]*\<(?<from>[^\>]+)\>");
            Match m = r.Match(from);
            if (r.IsMatch(from))
            {
                displayname = m.Groups["name"].Value;
                email = m.Groups["from"].Value;
            }
            else
            {
                if (from != "")
                {
                    displayname = "";
                    email = from;
                }
                else
                {
                    displayname = "";
                    email = "";
                }
            }
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="to"></param>
        /// <param name="displayname"></param>
        /// <param name="email"></param>
        private void parsTo(string to, out string displayname, out string email)
        {
            Regex r = new Regex(@"(?<name>[^""\<]+)[^\<]*\<(?<to>[^\>]+)\>");
            Match m = r.Match(to);
            if (r.IsMatch(to))
            {
                displayname = m.Groups["name"].Value;
                email = m.Groups["to"].Value;
            }
            else
            {
                if (to != "")
                {
                    email = to;
                    displayname = "";
                }
                else
                {
                    displayname = "";
                    email = "";
                }
            }
        }
  /// <summary>
        ///
        /// </summary>
        /// <param name="body"></param>
        /// <param name="encode"></param>
        /// <returns></returns>
        private string decodemail(string body, string encode)
        {
            string s = body;
            try
            {
                if (encode != "")
                {
                    byte[] bytes = Convert.FromBase64String(body.Trim());
                    s = System.Text.Encoding.GetEncoding(encode).GetString(bytes);
                }
            }
            catch { }
            return s;
        }
        private string decodemail(byte[] bytes, string encode)
        {
            string s ="";//= body;
            try
            {
                if (encode != "")
                {
                    //byte[] bytes = Convert.FromBase64String(body.Trim());
                    s = System.Text.Encoding.GetEncoding(encode).GetString(bytes);
                }
            }
            catch { }
            return s;
        }
        #endregion
  #region ICustomTask Members
  private NameValueCollection viewState = new NameValueCollection();
        private string emailType = "POP";
        public string _winID=String.Empty;
        public string GetWindowContent(string winID)
        {
            this._winID = winID;
            StringBuilder winHtml = new StringBuilder();
            winHtml.Append("<div style=\"width:98%;  border: solid 1px #cccccc; position:relative; background-color: #FCFCFC;overflow:hidden; \">");
  winHtml.Append("<table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\">");
  winHtml.Append("  <tr>");
            winHtml.Append("    <td class=\"header_right_bold\">Email Address:</td>");
            winHtml.Append("    <td class=\"header_left\"><input type=\"text\" id=\"_EmailAddress\" value=\"" + this.viewState["_EmailAddress"] + "\" /></td>");
            winHtml.Append("  </tr>");
  winHtml.Append("  <tr>");
            winHtml.Append("    <td class=\"header_right_bold\">Username:</td>");
            winHtml.Append("    <td class=\"header_left\"><input type=\"text\"  id=\"_Username\" value=\"" + this.viewState[ "_Username"] + "\" /></td>");
            winHtml.Append("  </tr>");
  winHtml.Append("  <tr>");
            winHtml.Append("    <td class=\"header_right_bold\">Password:</td>");
            winHtml.Append("    <td class=\"header_left\"><input type=\"password\" id=\"_Password\" value=\"" + this.viewState["_Password"] + "\" /></td>");
            winHtml.Append("  </tr>");
  winHtml.Append("  <tr>");
            winHtml.Append("    <td class=\"header_right_bold\">Type:</td>");
            winHtml.Append("    <td class=\"header_left\">");
            winHtml.Append("      <select id=\"_Type\" name=\"_Type\" onchange=\"javascript:_AsycPostback('" + this._winID + "','ChooseServerType');\" >");
            winHtml.Append("          <option value=\"POP\" " + (this.viewState["_Type"] == "POP" ? "selected" : "") + ">POP</option>");
            winHtml.Append("          <option value=\"Exchange\" " + (this.viewState["_Type"] == "Exchange" ? "selected" : "") + ">Exchange</option>");
            winHtml.Append("      </select>");
            winHtml.Append("    </td>");
            winHtml.Append("  </tr>");
  winHtml.Append("  <tr>");
            winHtml.Append("    <td class=\"header_right_bold\">Host:</td>");
            winHtml.Append("    <td class=\"header_left\"><input type=\"text\"  id=\"_Host\" value=\"" + this.viewState["_Host"] + "\" /></td>");
            winHtml.Append("  </tr>");
            if (emailType == "POP")
            {
                winHtml.Append("  <tr>");
                winHtml.Append("    <td class=\"header_right_bold\">Port:</td>");
                winHtml.Append("    <td class=\"header_left\"><input type=\"text\"  id=\"_Port\" value=\"" + this.viewState[ "_Port"] + "\" /></td>");
                winHtml.Append("  </tr>");
  winHtml.Append("  <tr>");
                winHtml.Append("    <td class=\"header_right_bold\">EnableSSL:</td>");
                winHtml.Append("    <td class=\"header_left\">");
                winHtml.Append("      <select id=\"_EnableSSL\" name=\"_EnableSSL\" >");
                winHtml.Append("          <option value=\"True\" " + (this.viewState["_EnableSSL"] == "True" ? "selected" : "") + ">True</option>");
                winHtml.Append("          <option value=\"False\" " + (this.viewState["_EnableSSL"] == "False" ? "selected" : "") + ">False</option>");
                winHtml.Append("      </select>");
                winHtml.Append("    </td>");
                winHtml.Append("  </tr>");
            }
            else if (emailType == "Exchange")
            {
                winHtml.Append("  <tr>");
                winHtml.Append("    <td class=\"header_right_bold\">DoMain:</td>");
                winHtml.Append("    <td class=\"header_left\"><input type=\"text\"  id=\"_DoMain\" value=\"" + this.viewState[ "_DoMain"] + "\" /></td>");
                winHtml.Append("  </tr>");
            }
            winHtml.Append("</table>");
  winHtml.Append("</div>");
  return winHtml.ToString();
        }
  public System.Xml.XmlDocument GetXML()
        {
            //<data>
            //<EmailAddress></EmailAddress>
            //<Username></Username>
            //<Password></Password>
            //<EmailType>POP|Exchange</EmailType>
            //<Host></Host>
            //<Port></Port>
            //<EnableSSL></EnableSSL>
            //<DoMain></DoMain>
            //</data>
            XmlDocument returnXML = new XmlDocument();
            XmlElement root = returnXML.CreateElement("data");
            returnXML.AppendChild(root);
            XmlElement emailAddress = returnXML.CreateElement("EmailAddress");
            emailAddress.InnerText = this.viewState["_EmailAddress"];
            root.AppendChild(emailAddress);
  XmlElement Username = returnXML.CreateElement("Username");
            Username.InnerText = this.viewState["_Username"];
            root.AppendChild(Username);
  XmlElement Password = returnXML.CreateElement("Password");
            Password.InnerText = this.viewState[ "_Password"];
            root.AppendChild(Password);
  XmlElement EmailType = returnXML.CreateElement("EmailType");
            EmailType.InnerText = this.viewState[ "_Type"];
            root.AppendChild(EmailType);
  XmlElement Host = returnXML.CreateElement("Host");
            Host.InnerText = this.viewState[ "_Host"];
            root.AppendChild(Host);
  switch (emailType)
            {
                case "POP":
                    XmlElement Port = returnXML.CreateElement("Port");
                    Port.InnerText = this.viewState[ "_Port"];
                    root.AppendChild(Port);
  XmlElement EnableSSL = returnXML.CreateElement("EnableSSL");
                    EnableSSL.InnerText = this.viewState[ "_EnableSSL"];
                    root.AppendChild(EnableSSL);
                    break;
                case "Exchange":
                    XmlElement DoMain = returnXML.CreateElement("DoMain");
                    DoMain.InnerText = this.viewState[ "_DoMain"];
                    root.AppendChild(DoMain);
                    break;
            }
            return returnXML;
        }
  public void PostbackAction(string command, System.Collections.Specialized.NameValueCollection argument)
        {
            this.viewState = argument;
            this.emailType = this.viewState[ "_Type"];
        }
  #endregion
  #region ISetTaskProperties Members
  public void SetProperties(System.Collections.Generic.Dictionary<string, object> properties)
        {
            if (properties["Status"].ToString() == "Edit")
            {
                this.SetDefaultValue(properties["TaskData"].ToString());
            }
            if (properties.ContainsKey("_EmailAddress"))
                this.viewState["_EmailAddress"] = properties["_EmailAddress"].ToString();
            if (properties.ContainsKey("_Username"))
                this.viewState["_Username"] = properties["_Username"].ToString();
            if (properties.ContainsKey("_Password"))
                this.viewState["_Password"] = properties["_Password"].ToString();
            if (properties.ContainsKey("_Type"))
                this.viewState["_Type"] = properties["_Type"].ToString();
            if (properties.ContainsKey("_Host"))
                this.viewState["_Host"] = properties["_Host"].ToString();
            if (properties.ContainsKey("_Port"))
                this.viewState["_Port"] = properties["_Port"].ToString();
            if (properties.ContainsKey("_EnableSSL"))
                this.viewState["_EnableSSL"] = properties["_EnableSSL"].ToString();
            if (properties.ContainsKey("_DoMain"))
                this.viewState["_DoMain"] = properties["_DoMain"].ToString();
  }
  private void SetDefaultValue(String taskXML)
        {
            //<data>
            //<EmailAddress></EmailAddress>
            //<Username></Username>
            //<Password></Password>
            //<EmailType>POP|Exchange</EmailType>
            //<Host></Host>
            //<Port></Port>
            //<EnableSSL></EnableSSL>
            //<DoMain></DoMain>
            //</data>
            if (taskXML != String.Empty)
            {
                XmlDocument dataXML = new XmlDocument();
                dataXML.LoadXml(taskXML);
  XmlNode EmailAddress = dataXML.GetElementsByTagName("EmailAddress")[0];
                this.viewState["_EmailAddress"] = EmailAddress.InnerText;
  XmlNode Username = dataXML.GetElementsByTagName("Username")[0];
                this.viewState[ "_Username"] = Username.InnerText;
  XmlNode Password = dataXML.GetElementsByTagName("Password")[0];
                this.viewState["_Password"] = Password.InnerText;
  XmlNode EmailType = dataXML.GetElementsByTagName("EmailType")[0];
                this.viewState["_Type"] = EmailType.InnerText;
  XmlNode Host = dataXML.GetElementsByTagName("Host")[0];
                this.viewState[ "_Host"] = Host.InnerText;
                this.emailType = EmailType.InnerText;
                switch (EmailType.InnerText)
                {
                    case "POP":
                        XmlNode Port = dataXML.GetElementsByTagName("Port")[0];
                        this.viewState[ "_Port"] = Port.InnerText;
  XmlNode EnableSSL = dataXML.GetElementsByTagName("EnableSSL")[0];
                        this.viewState[ "_EnableSSL"] = EnableSSL.InnerText;
                        break;
                    case "Exchange":
                        XmlNode DoMain = dataXML.GetElementsByTagName("DoMain")[0];
                        this.viewState[ "_DoMain"] = DoMain.InnerText;
                        break;
                }
            }
        }
        #endregion
        class emailMessage
        {
            public string subject = "";
            public DateTime date = DateTime.Now;
            public string displayname = "";
            public string from = "";
            public string body = "";
            public int mailindex = -1;
            public string displaytoname = "";
            public string to = "";
            public string attachments = "";
            public byte[] attachmentByte = null;
            public string attachmentName = "";
        }
        class Attachment
        {
            public byte[] attachmentByte = null;
            public string attachmentName = "";
            public int length;
        }
    }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-112037-1-1.html 上篇帖子: 安装Exchange 2003的一点小问题 下篇帖子: Exchange邮件方案建议书
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表