namespace Mail2SMS { using FreebieSMS.SendSMS; using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices; using System; using System.Collections; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Net; using System.Net.Mail; using System.Net.Sockets; using System.Runtime.CompilerServices; using System.ServiceProcess; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Timers; using System.Web.Mail; using System.Xml; using ReadyPOP3; [DesignerGenerated] public class Srvc_Mail2SMS : ServiceBase { private static ArrayList __ENCList = new ArrayList(); [AccessedThroughProperty("EventLog1")] private EventLog _EventLog1; private IContainer components; private string Country; private System.Timers.Timer Timer1; private sendSms Webservices4sendingSMS; private string website; public Srvc_Mail2SMS() { ArrayList list = __ENCList; lock (list) { __ENCList.Add(new WeakReference(this)); } this.Timer1 = new System.Timers.Timer(); this.Webservices4sendingSMS = new sendSms(); this.InitializeComponent(); if (!EventLog.SourceExists("Email2SMSSource")) { EventLog.CreateEventSource("Email2SMSSource", "Email2SMSLog"); } this.EventLog1.Source = "Email2SMSSource"; this.EventLog1.Log = "Email2SMSLog"; this.Timer1.Elapsed += new ElapsedEventHandler(this.OnElapsedTime); this.Timer1.Interval = 60 * Conversions.ToInteger(Conversions.ToString(1) + ConfigurationSettings.AppSettings["RecursiveOnce"]); this.Timer1.AutoReset = true; this.Timer1.Enabled = true; } protected void ConvertMail2SMS(int IterationCount) { if (IterationCount != 1) { string strLog = "Transaction Summary : \r\nProcess Initiated \r\n "; POP3Client pop = new POP3Client(); pop.Host = ConfigurationSettings.AppSettings["POP3_Host"]; pop.Username = ConfigurationSettings.AppSettings["POP3_UserName"]; pop.Password = ConfigurationSettings.AppSettings["POP3_Password"]; try { pop.Connect(); strLog += "Login successfull \r\n "; pop.Stat(); ReadyPOP3.Message[] messageArray = new ReadyPOP3.Message[pop.MessageCount + 1]; strLog += Conversions.ToString(pop.MessageCount) + " messages detected \r\n "; int messageCount = pop.MessageCount; for (int i = 1; i <= messageCount; i++) { strLog += "Screening Message " + Conversions.ToString(i) + " \r\n "; string strEmailContents = pop.Retr(i); messageArray[i] = new ReadyPOP3.Message(strEmailContents,false); if (!String.IsNullOrEmpty(messageArray[i].SentTo) || !String.IsNullOrEmpty(messageArray[i].From)) { string strFromName = this.GetFromName(messageArray[i].From.Trim()); strFromName = strFromName.Replace("\"", ""); strFromName = strFromName.Substring(0, 10); // Maximum length strLog += "From Name " + strFromName + " \r\n "; string strTrimmedRecipients = messageArray[i].SentTo.Trim().Replace(",", ";"); string[] strRecipients = strTrimmedRecipients.Split(new char[] { Convert.ToChar(";") }); foreach (string strRecipient in strRecipients) { string strFormattedRecipient = this.getMailFormat(strRecipient); strLog += "To " + strFormattedRecipient + " \r\n"; string strMailDomain = ConfigurationSettings.AppSettings["MailDomain2Process"]; string strThisMailDomain = strFormattedRecipient.Split(new char[] { Convert.ToChar("@") })[1]; if (strThisMailDomain.Trim().ToUpper() == strMailDomain.ToUpper()) { strLog += "To number contains " + ConfigurationSettings.AppSettings["MailDomain2Process"] + " \r\n "; string strRecipientNumber = strFormattedRecipient.Split(new char[] { Convert.ToChar("@") })[0].Trim(); string strNumberLength = Conversions.ToString(Strings.Len(strRecipientNumber)); string strToNumber = strRecipientNumber; strToNumber = strToNumber.ToString().Substring(0, 4); strLog = (strLog + "Mobile length " + strNumberLength + " \r\n ") + "Prefix " + strToNumber + " \r\n "; bool blnFailedToDiscoverPrefix = false; try { this.Webservices4sendingSMS.Url = "http://www.freebiesms.co.uk/sendsms.asmx"; strLog += "Web Service triggered " + this.ParseXML(Conversions.ToInteger(strNumberLength), strToNumber, 2) + "/sendsms.asmx\r\n"; } catch (Exception exPrefixDiscovery) { ProjectData.SetProjectError(exPrefixDiscovery); blnFailedToDiscoverPrefix = true; strLog += "No URL found for " + strRecipientNumber; strLog += "(Length : " + strNumberLength + ")"; strLog += " Exception : " + exPrefixDiscovery.Message.ToString() + " \r\n"; ProjectData.ClearProjectError(); } try { if (!blnFailedToDiscoverPrefix) { string strFromNumber = ConfigurationSettings.AppSettings["DefaultFromNumber"]; string strLocale = this.ParseXML(Conversions.ToInteger(strNumberLength), strToNumber, 1); if (String.IsNullOrEmpty(strLocale)) { throw new Exception(strToNumber + " is not a valid number format, or an unsupported destination"); } this.Webservices4sendingSMS.SendSms(strFromName, strFromNumber, strRecipientNumber, messageArray[i].Subject, strLocale); strLog += "From : " + messageArray[i].From; strLog += " To : " + strRecipientNumber; strLog += " Subject : " + messageArray[i].Subject; strLog += " Locale : " + strLocale; strLog += "Successfully sent message to " + strRecipientNumber + " \r\n "; pop.Delete(i); try { string strSMTPUserName = ConfigurationSettings.AppSettings["SMTP_UserName"]; string strToEmailAddress = this.GetMailAddress(messageArray[i].From.Trim()); this.SendMail(strSMTPUserName, strToEmailAddress, "Message sent", "Successfully sent message to " + strRecipientNumber); } catch (Exception exFailedToEmailSender) { ProjectData.SetProjectError(exFailedToEmailSender); strLog += "Error sending mail notification Exception : "; strLog += exFailedToEmailSender.Message.ToString() + " \r\n"; ProjectData.ClearProjectError(); } } pop.Delete(i); } catch (Exception exErrorSendingMessage) { ProjectData.SetProjectError(exErrorSendingMessage); strLog += " Error sending Message: "; strLog += exErrorSendingMessage.Message.ToString() + " \r\n "; string strSMTPUserName = ConfigurationSettings.AppSettings["SMTP_UserName"]; string strEmailRecipient = this.GetMailAddress(messageArray[i].From.Trim()); this.SendMail(strSMTPUserName, strEmailRecipient, "Message sending failed", " Error sending Message- " + exErrorSendingMessage.Message.ToString()); ProjectData.ClearProjectError(); pop.Delete(i); } } else { string strEMailDomain = ConfigurationSettings.AppSettings["MailDomain2Process"]; strLog += "To number doesn't contain " + strEMailDomain + " \r\n "; pop.Delete(i); } } } else { // TO or FROM is empty. strLog += " Invalid Email #" + i.ToString() + "\r\n"; pop.Delete(i); } } } catch(Exception exPopLogin) { strLog += "Login Failed. Please check the server name,username,password and Incoming port. \r\n"; strLog += exPopLogin.ToString(); } pop.Quit(); pop.Disconnect(); this.EventLog1.WriteEntry(strLog + "Process completed"); } } [DebuggerNonUserCode] protected override void Dispose(bool disposing) { try { if (((disposing && (this.components != null)) ? 1 : 0) != 0) { this.components.Dispose(); } } finally { base.Dispose(disposing); } } public string GetFromName(string FromAddress) { if (FromAddress.Contains("<")) { return FromAddress.Substring(0, FromAddress.IndexOf("<")); } return FromAddress; } public string GetMailAddress(string FromAddress) { if (FromAddress.Contains("<")) { FromAddress = FromAddress.Replace(FromAddress.Substring(0, FromAddress.IndexOf("<")), ""); return FromAddress.Replace(">", "").Replace("<", ""); } return FromAddress; } private string getMailFormat(string str) { if (str.IndexOf(">") > 0) { return Strings.Left(str.Split(new char[] { '<' })[1], str.Split(new char[] { '<' })[1].IndexOf(">")); } return str; } [DebuggerStepThrough] private void InitializeComponent() { this.EventLog1 = new EventLog(); this.EventLog1.BeginInit(); this.ServiceName = "Mail2SMS"; this.EventLog1.EndInit(); } [DebuggerNonUserCode, MTAThread] public static void Main() { ServiceBase.Run(new ServiceBase[] { new Srvc_Mail2SMS() }); } private void OnElapsedTime(object sender, ElapsedEventArgs e) { this.ConvertMail2SMS(2); } protected override void OnStart(string[] args) { } protected override void OnStop() { this.Timer1.Enabled = false; this.ConvertMail2SMS(2); } private string ParseXML(int len, string tono, int Typ) { XmlDocument node = new XmlDocument(); node.Load(ConfigurationSettings.AppSettings["SETTINGS_XML"]); XmlNodeReader reader = new XmlNodeReader(node); while (reader.Read()) { switch (((int) reader.NodeType)) { case 1: if ((len == Conversions.ToInteger(reader.GetAttribute("MobileLength"))) & (Conversions.ToInteger(tono) == Conversions.ToInteger(reader.GetAttribute("Prefix")))) { this.Country = reader.GetAttribute("Locale"); this.website = reader.GetAttribute("Website"); } break; case 3: Console.WriteLine(reader.Value); break; case 8: Console.WriteLine("<!--" + reader.Value + "-->"); break; case 15: Console.WriteLine("</" + reader.Name + ">"); break; case 0x11: Console.WriteLine("<?" + reader.Name + " " + reader.Value + "?>"); break; } } if (Typ == 1) { return this.Country; } return this.website; } public void SendMail(string strFrom, string strTo, string strSubject, string strMessage) { System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); System.Net.Mail.MailMessage message2 = new System.Net.Mail.MailMessage(new MailAddress(strFrom.Trim()), new MailAddress(strTo)); message2.BodyEncoding = Encoding.UTF8; message2.Subject = strSubject.Trim(); message2.Body = strMessage.Trim() + "\r\n"; message2.IsBodyHtml = true; SmtpClient client = new SmtpClient(ConfigurationSettings.AppSettings["SMTP_Host"]); client.Credentials = ((ICredentialsByHost)new NetworkCredential(ConfigurationSettings.AppSettings["SMTP_UserName"], ConfigurationSettings.AppSettings["SMTP_Password"])); client.Port = (Conversions.ToInteger(ConfigurationSettings.AppSettings["SMTP_MailOutgoingPort"])); client.Send(message2); } internal virtual EventLog EventLog1 { [DebuggerNonUserCode] get { return this._EventLog1; } [MethodImpl(MethodImplOptions.Synchronized), DebuggerNonUserCode] set { this._EventLog1 = value; } } } } |