/// <summary> /// 接收一个邮件处理 /// </summary> /// <param name="msg"></param> /// <param name="result"></param> public void HandleReceiveMail(OpenPOP.MIMEParser.Message msg, MailResult result) { string subject = msg.Subject.ToString();//回复标题 string body = (string)msg.MessageBody[msg.MessageBody.Count - 1]; string replyTime = msg.Date.ToString(); string rawManage = msg.RawMessage;//完整的邮件信息 string user = msg.FromEmail; int start = subject.IndexOf("#"); int length = body.IndexOf("========================================================="); if (length > -1) { //body = body.Substring(0, length);//回复内容 } if (!CheckIsGarbageEmail(subject))//如果不是垃圾邮件 { if (start < 0) { ErrorEmail(subject, rawManage, user, replyTime, body); } else { string sn = subject.Substring(start);//标题截取关键字 bool mailBool = UpdateReplyByEmail(subject, sn, body, replyTime, rawManage, user, result.StateText); if (!mailBool) { ErrorEmail(subject, rawManage, user, replyTime, body); } else { result.Success += 1; } } } }
public static ApplyItem getApplyItem(OpenPOP.MIMEParser.Message m) { if (m.Subject.Contains("在线融资申请") && m.MessageBody.Count > 0) { String body = m.MessageBody[m.MessageBody.Count - 1].ToString(); if (m.HTML) { ApplyItem item = new ApplyItem(); String text = Utils.Tools.prepareHTML(body); string[] sub = text.Split(new String[] { "#" }, StringSplitOptions.RemoveEmptyEntries); if (sub.Length % 2 != 0 || sub.Length == 0) { return(null); } for (int i = 0; i < sub.Length; i = i + 2) { item.addKeyValue(sub[i], sub[i + 1]); } item.Time = m.Date; item.From = m.From; item.Title = m.Subject; item.FromEmail = m.FromEmail; return(item); } else { return(null); } } else { return(null); } }
/// <summary> /// 接受邮件,处理所有正确存在邮件 /// </summary> public MailResult ReceiveMail(string asmName, string typeName, string methodName, bool delete, string stateText) { MailResult result = new MailResult(); result.StateText = stateText; string strPort = ""; if (strPort == "" || strPort == string.Empty) { strPort = "110"; } POPClient popClient = new POPClient(); try { popClient.Connect(PopServer, Convert.ToInt32(strPort)); popClient.Authenticate(UserName, Password); int count = popClient.GetMessageCount(); int resultCount = 0; for (int i = count; i >= 1; i--) { OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, false); if (msg != null) { resultCount++; //获取DLL所在路径: string dllPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath; dllPath = Path.GetDirectoryName(dllPath); //依据所要执行类类型名,获取类实例: string asmNames = asmName;//程序集名称(*.dll) string dllFile = Path.Combine(dllPath, asmNames); Assembly asm = Assembly.LoadFrom(dllFile); //获取类方法并执行: object obj = asm.CreateInstance(typeName, false); Type type = obj.GetType(); //类名 MethodInfo method = type.GetMethod(methodName); //方法名称 //如果需要参数则依此行 object[] args = new object[] { (object)msg, (object)result }; //执行并调用方法 method.Invoke(obj, args); if (delete) { popClient.DeleteMessage(i); //邮件保存成功,删除服务器备份 } } } result.Count = resultCount; } catch (Exception ex) { throw ex; } finally { popClient.Disconnect(); } return(result); }
private void backgroundWorkerGetAllMails_DoWork(object sender, DoWorkEventArgs e) { Utility.Log = true; popClient.Disconnect(); popClient.Connect(config.ServerAddr, int.Parse(config.Port)); popClient.Authenticate(config.Email, config.PWD); int Count = popClient.GetMessageCount(); int percent = 0; backgroundWorkerGetAllMails.ReportProgress(-1, Count); List <ApplyItem> list = new List <ApplyItem>(); for (int i = Count; i > 0; i--) { OpenPOP.MIMEParser.Message m = popClient.GetMessage(i, false); ApplyItem item = ApplyItemController.getApplyItem(m); percent = percent + 1; if (item != null) { list.Add(item); } backgroundWorkerGetAllMails.ReportProgress((int)percent * 100 / Count, item); } for (int k = 0; k < list.Count; k++) { } String path = Application.StartupPath + "\\Excel\\" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xls"; ExcelCreator ec = new ExcelCreator(); if (ec.toExcel(list, path)) { e.Result = "path:" + path; } else { e.Result = "ER:生成excel失败"; } }
//receive email from POP3 server public void ReceivePop3Mail() { POPClient popClient = new POPClient(); //new POP client to grab emails Hashtable msgs = new Hashtable(); //stores the email messages // receive emails try { popClient.Disconnect(); //housekeeping //connect to pop mail server and authenticate popClient.Connect("pop.gmail.com", 995, true); popClient.Authenticate("*****@*****.**", "sd1ma2sn3"); int Count = popClient.GetMessageCount(); //number of emails in the inbox msgs.Clear(); //clear out the message hashtable //iterate through messages for (int i = Count; i >= 0; i -= 1) { try { OpenPOP.MIMEParser.Message m = popClient.GetMessage(i, false);//grab a message and its header info if (m != null) { if (m.FromEmail == "*****@*****.**") { msgs.Add("msg" + i.ToString(), m);//put the message in the hashtable string htmlbody = m.MessageBody[0].ToString(); int starting_tag = 0, ending_tag = 0, ID = -1; starting_tag = htmlbody.IndexOf("תאריך ושעה"); ending_tag = htmlbody.IndexOf("לפרטים נוספים"); htmlbody = htmlbody.Substring(starting_tag, ending_tag - starting_tag + 1); htmlbody = htmlbody.Replace("\n", ""); htmlbody = htmlbody.Replace("\t", ""); DateTime date = DateTime.Parse(htmlbody.Substring(htmlbody.IndexOf("תאריך ושעה") + 12, htmlbody.IndexOf("<br>") - htmlbody.IndexOf("תאריך ושעה") - 12)); htmlbody = htmlbody.Remove(htmlbody.IndexOf("תאריך ושעה"), htmlbody.IndexOf("<br>") - htmlbody.IndexOf("תאריך ושעה") + 4); string name = htmlbody.Substring(htmlbody.IndexOf("שם הלקוח המעביר") + 17, htmlbody.IndexOf("<br>") - htmlbody.IndexOf("שם הלקוח המעביר") - 17); htmlbody = htmlbody.Remove(htmlbody.IndexOf("שם הלקוח המעביר"), htmlbody.IndexOf("<br>") - htmlbody.IndexOf("שם הלקוח המעביר") + 4); double amount = double.Parse(htmlbody.Substring(htmlbody.IndexOf("סכום") + 6, htmlbody.IndexOf("<br>") - htmlbody.IndexOf("סכום") - 6)); htmlbody = htmlbody.Remove(htmlbody.IndexOf("סכום"), htmlbody.IndexOf("<br>") - htmlbody.IndexOf("סכום") + 4); string payment_id = htmlbody.Substring(htmlbody.IndexOf("מספר פעולה") + 12, htmlbody.IndexOf("<br>") - htmlbody.IndexOf("מספר פעולה") - 12); //updateing DB ADO.ExecuteNonQuery("Insert INTO Payments (Full_name, Amount, buying_date, Payment_ID) values ('" + name + "'," + amount + ",'" + date + "','" + payment_id + "')"); } } else { } } catch (Exception ex) { } } } catch (Exception x) { } popClient.Disconnect(); }
/// <summary> /// Download email messages from the POP3 server for a given Foe message processor. /// </summary> /// <param name="server">POP3 server information</param> /// <param name="processorEmail">The current Foe message processor's email address.</param> public static void DownloadMessages(PopServer server, string processorEmail) { // connect to POP3 server and download messages //FoeDebug.Print("Connecting to POP3 server..."); POPClient popClient = new POPClient(); popClient.IsUsingSsl = server.SslEnabled; popClient.Disconnect(); popClient.Connect(server.ServerName, server.Port); popClient.Authenticate(server.UserName, server.Password); FoeDebug.Print("Connected to POP3."); // get mail count int count = popClient.GetMessageCount(); FoeDebug.Print("Server reported " + count.ToString() + " messages."); // go through each message, from newest to oldest for (int i = count; i >= 1; i -= 1) { //FoeDebug.Print("Opening mail message..."); OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, true); if (msg != null) { // Get subject and verify sender identity // Subject line in the mail header should look like one of the followings: // // Normal request (for news feed and content): // Subject: Request <Request ID> by <User ID> // // Registration request: // Subject: Register <Request ID> by Newbie // // where: // Request ID is the request ID generated by the Foe client // User ID is the user's ID as assigned by the server //FoeDebug.Print("Message is not null. Getting message details."); string subject = msg.Subject; string fromEmail = msg.FromEmail; //FoeDebug.Print("Subject: " + subject); //FoeDebug.Print("From: " + fromEmail); // parse subject line string[] tokens = subject.Trim().Split(new char[] { ' ' }); if (tokens.Length == 4) { // check what type of request is it string requestType = tokens[0].ToUpper(); string requestId = tokens[1]; string userId = tokens[3]; FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "subject: " + subject + "requestType: " + requestType); if (requestType.ToUpper().CompareTo("REGISTE") == 0) { //FoeDebug.Print("This is a registration message."); // It's a registration request SaveRegistrationRequest(requestId, fromEmail, processorEmail); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "Received registration request from " + fromEmail); } else if (requestType.ToUpper().CompareTo("CATALOG") == 0) { // get user info by email address FoeUser user = FoeServerUser.GetUser(fromEmail); // verify user's email against the user ID if ((user != null) && (userId == user.UserId) && (processorEmail == user.ProcessorEmail)) { FoeDebug.Print("User verified."); // the user's identity is verified SaveCatalogRequest(requestId, user.Email, processorEmail); } else { //FoeDebug.Print("User is not registered. Request not processed."); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Warning, "Received content request from unregistered user " + fromEmail); } } else if (requestType.ToUpper().CompareTo("CONTENT") == 0) { //FoeDebug.Print("This is a content request message."); // It's a content request. // We need to verify the user's identify first. //FoeDebug.Print("Verifying user identity..."); // get user info by email address FoeUser user = FoeServerUser.GetUser(fromEmail); // verify user's email against the user ID if ((user != null) && (userId == user.UserId) && (processorEmail == user.ProcessorEmail)) { FoeDebug.Print("User verified."); // the user's identity is verified // get the full message body OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); string foe = Encoding.UTF8.GetString(decompressedMsg); string[] catalogs = foe.Trim().Split(new char[] { ',' }); // save request if (catalogs.Length == 0) { return; } SaveContentRequest(requestId, user.Email, catalogs, processorEmail); //FoeDebug.Print("Request saved and pending processing."); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "Received content request from verified user " + fromEmail); } catch (Exception except) { // the message is likely malformed // so just ignore it FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Warning, "Received malformed content request from verified user " + fromEmail + "\r\n" + except.ToString() + "Raw message:\r\n" + msgBody + "\r\n"); //throw except; } } else { //FoeDebug.Print("User is not registered. Request not processed."); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Warning, "Received content request from unregistered user " + fromEmail); } } else if (requestType.ToUpper().CompareTo("FEED") == 0) { //FoeDebug.Print("This is a content request message."); // It's a content request. // We need to verify the user's identify first. //FoeDebug.Print("Verifying user identity..."); // get user info by email address FoeUser user = FoeServerUser.GetUser(fromEmail); // verify user's email against the user ID if ((user != null) && (userId == user.UserId) && (processorEmail == user.ProcessorEmail)) { FoeDebug.Print("User verified."); // the user's identity is verified // get the full message body OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); string foe = Encoding.UTF8.GetString(decompressedMsg); string[] array = foe.Trim().Split(new char[] { ',' }); // save request if (array.Length == 0) { return; } SaveFeedRequest(requestId, user.Email, array, processorEmail); //FoeDebug.Print("Request saved and pending processing."); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "Received feed request from verified user " + fromEmail); } catch (Exception except) { // the message is likely malformed // so just ignore it FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Warning, "Received malformed feed request from verified user " + fromEmail + "\r\n" + except.ToString() + "Raw message:\r\n" + msgBody + "\r\n"); //throw except; } } else { //FoeDebug.Print("User is not registered. Request not processed."); FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Warning, "Received content request from unregistered user " + fromEmail); } } else { // Non-Foe message FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "Received non-Foe message from " + fromEmail); } } else { // Non-Foe message FoeServerLog.Add(_className + ".DownloadMessages", FoeServerLog.LogType.Message, "Received non-Foe message from " + fromEmail); } // Delete the current message popClient.DeleteMessage(i); } } popClient.Disconnect(); }
/// <summary> /// Download and process email messages from the POP3 server. /// </summary> /// <param name="server">POP3 server information</param> public static void DownloadMessages() { Trace.WriteLine("Entered DownloadMessages()."); // Get POP3 server info PopServer server = GetPopServer(); Trace.WriteLine(" Retrieved POP server info."); // connect to POP3 server and download messages //FoeDebug.Print("Connecting to POP3 server..."); POPClient popClient = new POPClient(); popClient.IsUsingSsl = server.SslEnabled; popClient.Disconnect(); popClient.Connect(server.ServerName, server.Port); popClient.Authenticate(server.UserName, server.Password); Trace.WriteLine(" Connected to POP3."); // get mail count int count = popClient.GetMessageCount(); Trace.WriteLine(" There are " + count.ToString() + " messages in inbox."); // go through each message, from newest to oldest for (int i = count; i >= 1; i -= 1) { Trace.WriteLine(" Opening message #" + i.ToString()); OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, true); if (msg != null) { string subject = msg.Subject; string fromEmail = msg.FromEmail; Trace.WriteLine(" Message came from " + msg.FromEmail + " with subject \"" + msg.Subject + "\""); // Check if fromEmail is the same as processor's email on file if (fromEmail.ToLower() == FoeClientRegistry.GetEntry("processoremail").Value.ToLower()) { Trace.WriteLine(" Message came from the processor."); // parse subject line string[] tokens = subject.Trim().Split(new char[] { ' ' }); // There should be 5 or 6 tokens if (tokens.Length == 5) { Trace.WriteLine(" There are 5 tokens."); // Get the request ID for this reply string requestId = tokens[2]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { Trace.WriteLine(" Message Request ID matched."); // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; Trace.WriteLine(" Downloaded full message body."); try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); Trace.WriteLine(" Decoded Base64 message."); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); Trace.WriteLine(" Decompressed message."); string foe = Encoding.UTF8.GetString(decompressedMsg); Trace.WriteLine(" Retrieved original FOE message."); // Check what is the original request type if (req.Type.ToLower() == "registe") { Trace.WriteLine(" Registration reply. Processing message."); ProcessRegistrationReply(foe); Trace.WriteLine(" Registration reply processed."); } else if (req.Type.ToLower() == "catalog") { Trace.WriteLine(" Catalog reply. Processing message."); ProcessCatalogReply(foe); Trace.WriteLine(" Catalog reply processed."); } else if (req.Type.ToLower() == "feed") { Trace.WriteLine(" feed reply. Processing message."); ProcessCatalogReply(foe); Trace.WriteLine(" feed reply processed."); } } catch (Exception except) { // the message is likely malformed // so just ignore it Trace.WriteLine(" Exception detected: \r\n" + except.ToString()); } } else { Trace.WriteLine(" Message ID mismatched."); } } //content request's reply else if (tokens.Length == 6) { Trace.WriteLine(" There are 6 tokens."); // Get the request ID for this reply string catalog = tokens[1]; string requestId = tokens[3]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { Trace.WriteLine(" Message Request ID matched."); // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; Trace.WriteLine(" Downloaded full message body."); try { byte[] compressed = Convert.FromBase64String(msgBody); byte[] decompressed = CompressionManager.Decompress(compressed); string foe = Encoding.UTF8.GetString(decompressed); // Check what is the original request type if (req.Type.ToLower() == "content") { Trace.WriteLine(" Content reply. Processing message."); ProcessContentReply(catalog, foe); Trace.WriteLine(" Content reply processed."); } } catch (Exception except) { // the message is likely malformed // so just ignore it Trace.WriteLine(" Exception detected: \r\n" + except.ToString()); } } else { Trace.WriteLine(" Message ID mismatched."); } } else { Trace.WriteLine(" Message does not have 5 tokens."); } } else { Trace.WriteLine(" Message did not come from processor."); } } // Delete the current message popClient.DeleteMessage(i); Trace.WriteLine(" Deleted current message in inbox."); } popClient.Disconnect(); Trace.WriteLine(" Disconnected from POP server."); Trace.WriteLine(" Exiting DownloadMessages()."); }
/// <summary> /// Download and process email messages from the POP3 server. /// </summary> /// <param name="server">POP3 server information</param> public static void DownloadMessages() { // Get POP3 server info PopServer server = GetPopServer(); // connect to POP3 server and download messages //FoeDebug.Print("Connecting to POP3 server..."); POPClient popClient = new POPClient(); popClient.IsUsingSsl = server.SslEnabled; popClient.Disconnect(); popClient.Connect(server.ServerName, server.Port); popClient.Authenticate(server.UserName, server.Password); FoeDebug.Print("Connected to POP3."); // get mail count int count = popClient.GetMessageCount(); // go through each message, from newest to oldest for (int i = count; i >= 1; i -= 1) { OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, true); if (msg != null) { string subject = msg.Subject; string fromEmail = msg.FromEmail; // Check if fromEmail is the same as processor's email on file if (fromEmail.ToLower() == FoeClientRegistry.GetEntry("processoremail").Value.ToLower()) { // parse subject line string[] tokens = subject.Trim().Split(new char[] { ' ' }); // There should be 5 tokens if (tokens.Length == 5) { // Get the request ID for this reply string requestId = tokens[2]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); string foeXml = Encoding.UTF8.GetString(decompressedMsg); // Check what is the original request type if (req.Type.ToLower() == "reg") { ProcessRegistrationReply(foeXml); } else if (req.Type.ToLower() == "content") { ProcessContentReply(foeXml); } else if (req.Type.ToLower() == "catalog") { ProcessCatalogReply(foeXml); } } catch (Exception) { // the message is likely malformed // so just ignore it } } } } } // Delete the current message popClient.DeleteMessage(i); } popClient.Disconnect(); }