private void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (DateTime.Now <= nextCheckDate && DateTime.Now.Hour == 6) { nextCheckDate = DateTime.Now.AddDays(1); DataSet dsUnsent = DataHandler.getData(UnsentEmailQuery, out status); String message = "Unsent Email Report: " + DateTime.Now.ToString() + ".<br/><br/>"; if (dsUnsent != null && dsUnsent.Tables.Count > 0 && dsUnsent.Tables[0].Rows.Count > 0) { message += "Total Count: " + dsUnsent.Tables[0].Rows.Count.ToString() + ".<br/><br/>"; message += "<table>"; message += "<tr><td>Building Code</td><td>Unit No</td><td>Email</td><td>Queue Date</td><td>Subject</td><td>Document Type</td></tr>"; foreach (DataRow dr in dsUnsent.Tables[0].Rows) { message += "<tr><td>" + dr["Building"].ToString() + "</td><td>" + dr["Unit"].ToString() + "</td><td>" + dr["Email"].ToString() + "</td>"; message += "<td>" + dr["Queued"].ToString() + "</td><td>" + dr["Subject"].ToString() + "</td><td>" + dr["Type"].ToString() + "</td></tr>"; } message += "</table>"; } else { message += "No unsent emails."; } String[] sMailAddys = new String[] { "*****@*****.**", "*****@*****.**" }; List <String> addies = new List <string>(); addies.AddRange(sMailAddys); MailSender.SendMail("*****@*****.**", addies, "Unsent Mail Report", message, true, null); } }
private void btnAll_Click(object sender, EventArgs e) { String pathName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pastelusers.csv"); sw = new StreamWriter(pathName); sw.WriteLine("Building,Acc,Emails"); allCustomers = new List <CustomerConstruct>(); foreach (DataRow dr in this.astrodonDataSet.tblBuildings.Rows) { String abbr = dr["code"].ToString(); if (!String.IsNullOrEmpty(abbr)) { GetPastelAccounts(abbr); } } sw.Close(); MailSender.SendMail("*****@*****.**", "*****@*****.**", "Customer List", "Here it is", false, new String[] { pathName }); }
public void SendBulkMails(bool flagQueued = false, bool queued = false) { String mailQuery = "SELECT msg.id, msg.fromAddress, b.Code, b.DataPath, msg.incBCC, msg.bccAddy, msg.subject, msg.message, msg.billBuilding, msg.billAmount FROM tblMsg AS msg "; mailQuery += " INNER JOIN tblBuildings AS b ON msg.buildingID = b.id WHERE (msg.id IN (SELECT DISTINCT msgID FROM tblMsgRecipients WHERE(sentDate IS NULL))) "; if (flagQueued) { mailQuery += " AND msg.queue = '" + queued + "'"; } DataHandler dh = new DataHandler(); String status = String.Empty; DataSet ds = DataHandler.getData(mailQuery, out status); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow dr in ds.Tables[0].Rows) { int msgID = int.Parse(dr["id"].ToString()); String bCode = dr["Code"].ToString(); String dataPath = dr["DataPath"].ToString(); bool incBCC = bool.Parse(dr["incBCC"].ToString()); String fromAddress = dr["fromAddress"].ToString(); String bccAddy = dr["bccAddy"].ToString(); String subject = dr["subject"].ToString(); String message = dr["message"].ToString(); bool billBuilding = bool.Parse(dr["billBuilding"].ToString()); double billAmount = double.Parse(dr["billAmount"].ToString()); String attachmentQuery = "SELECT Name, Data FROM tblMsgData WHERE msgID = " + msgID.ToString(); DataSet dsAttachment = DataHandler.getData(attachmentQuery, out status); Dictionary <String, byte[]> attachments = new Dictionary <string, byte[]>(); if (dsAttachment != null && dsAttachment.Tables.Count > 0 && dsAttachment.Tables[0].Rows.Count > 0) { foreach (DataRow drA in dsAttachment.Tables[0].Rows) { try { if (!attachments.ContainsKey(drA["Name"].ToString())) { attachments.Add(drA["Name"].ToString(), (byte[])drA["Data"]); } } catch { } } } String billableCustomersQuery = "SELECT distinct accNo FROM tblMsgRecipients WHERE billCustomer = 'True' and msgID = " + msgID.ToString(); String allRecipientsQuery = "SELECT id, accNo, recipient FROM tblMsgRecipients WHERE sentDate is null AND msgID = " + msgID.ToString(); DataSet billableCustomers = DataHandler.getData(billableCustomersQuery, out status); DataSet receivers = DataHandler.getData(allRecipientsQuery, out status); Dictionary <String, bool> emails = new Dictionary <string, bool>(); if (receivers != null && receivers.Tables.Count > 0 && receivers.Tables[0].Rows.Count > 0) { foreach (DataRow rrece in receivers.Tables[0].Rows) { try { String id = rrece["id"].ToString(); String[] emailAddys = rrece["recipient"].ToString().Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); bool success = MailSender.SendMail(fromAddress, emailAddys, subject, message, false, false, false, out status, attachments); String updQuery = "UPDATE tblMsgRecipients SET sentDate = '" + DateTime.Now.ToString() + "' WHERE id = " + id; RaiseEvent(String.Join(";", emailAddys) + " - " + status); DataHandler.setData(updQuery, out status); if (status != "") { RaiseEvent(updQuery + " - " + status); } try { emails.Add(rrece["accNo"].ToString(), success); } catch { } } catch { } } String bulkUpdateQuery = "UPDATE tblMsgRecipients SET sentDate = '" + DateTime.Now.ToString() + "' WHERE msgID = " + msgID.ToString(); DataHandler.setData(bulkUpdateQuery, out status); if (status != "") { RaiseEvent(bulkUpdateQuery + " - " + status); } } String updateQuery = "UPDATE tblMsg SET queue = 'False' WHERE id = " + msgID.ToString(); DataHandler.setData(updateQuery, out status); message += Environment.NewLine + Environment.NewLine; message += "Send status:" + Environment.NewLine + Environment.NewLine; var builder = new System.Text.StringBuilder(); builder.Append(message); foreach (KeyValuePair <String, bool> statuses in emails) { builder.Append(statuses.Key + " = " + statuses.Value.ToString() + Environment.NewLine); } message = builder.ToString(); if (incBCC) { MailSender.SendMail(fromAddress, new String[] { bccAddy }, subject, message, false, false, false, out status, attachments); } } } }
public void SendImmediateLetters() { DataSet queue = GetQueuedLetters(true); if (queue != null && queue.Tables.Count > 0 && queue.Tables[0].Rows.Count > 0) { RaiseEvent("Mail count = " + queue.Tables[0].Rows.Count.ToString()); foreach (DataRow qDR in queue.Tables[0].Rows) { try { String id = qDR["id"].ToString(); String[] email1 = qDR["toEmail"].ToString().Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); String subject = qDR["subject"].ToString(); String message = qDR["message"].ToString(); bool html = bool.Parse(qDR["html"].ToString()); bool isPA = html; html = false; bool addcc = bool.Parse(qDR["html"].ToString()); bool readreceipt = bool.Parse(qDR["html"].ToString()); String[] attachments = qDR["attachment"].ToString().Split(new String[] { ";" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < attachments.Length; i++) { if (attachments[i].Contains("PA Attachments")) { RaiseEvent("Original file name = " + attachments[i], "SendImmediateLetters"); attachments[i] = attachments[i].Replace("K:\\Debtors System\\PA Attachments\\", @"K:\\Pastel11\\Debtors System\\PA Attachments\\"); } } String[] files = new string[attachments.Length]; String accNo = qDR["unitno"].ToString(); String debtorEmail = qDR["fromEmail"].ToString(); String sentDate = qDR["sentDate"].ToString(); String cc = qDR["cc"].ToString(); String bcc = qDR["bcc"].ToString(); for (int i = 0; i < attachments.Length; i++) { String attachment = attachments[i]; String fileName = GetLetter(attachment); files[i] = fileName; attachments[i] = fileName; String actFileTitle = Path.GetFileNameWithoutExtension(fileName); String actFile = Path.GetFileName(fileName); } if (email1.Length > 0 && String.IsNullOrEmpty(sentDate)) { status = String.Empty; if (isPA && MailSender.SendMail(debtorEmail, email1, cc, bcc, subject, message, html, out status, attachments)) { if (!String.IsNullOrEmpty(status)) { RaiseEvent(status); } String update1 = "UPDATE tblLetterRun SET sentDate = getDate(), errorMessage = 'Processed & Sent' WHERE id = " + id; DataHandler.setData(update1, out status); } else if (MailSender.SendMail("*****@*****.**", email1, addcc ? debtorEmail : String.Empty, subject, message, html, out status, files)) { if (!String.IsNullOrEmpty(status)) { RaiseEvent(status); } String update1 = "UPDATE tblLetterRun SET sentDate = getDate(), errorMessage = 'Processed & Sent' WHERE id = " + id; DataHandler.setData(update1, out status); } else { String update1 = "UPDATE tblLetterRun SET sentDate = getDate(), errorMessage = 'Error: " + status + "' WHERE id = " + id; DataHandler.setData(update1, out status); RaiseEvent(status); } } else { RaiseEvent("Can't send mail", "SendImmediateLetters"); String update1 = "UPDATE tblLetterRun SET sentDate = getDate(), errorMessage = 'Error: No email address' WHERE id = " + id; DataHandler.setData(update1, out status); } } catch (Exception ex) { RaiseEvent(ex.Message + " " + ex.StackTrace, "SendImmediateLetters"); } } } }
private void GetMail() { timer.Enabled = false; popMessages = FetchAllMessages(hostName, port, useSSL, username, password); mailMessages = new List <MailMessage>(); if (popMessages.Count > 0) { if (messages == null) { messages = new Dictionary <string, EmailConstruct>(); } foreach (Message m in popMessages) { try { if (!messages.ContainsKey(m.Headers.MessageId)) { if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs("Event Fired: MailPopped")); } EmailConstruct e = new EmailConstruct(); e.ID = m.Headers.MessageId; MailMessage mm = m.ToMailMessage(); String body = mm.Body; e.SentFrom = mm.From.Address.Replace("@2way.co.za", ""); if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs(e.SentFrom)); } if (mm.To.Count > 0) { e.SentTo = mm.To.ToList()[0].Address; } e.ReceivedDate = m.Headers.DateSent; e.Subject = mm.Subject; messages.Add(e.ID, new EmailConstruct()); if (e.Subject == "SMS to email") { #region SMS Emails List <String> refs = References(); foreach (String reference in refs) { if (e.Body.Contains(reference)) { e.Reference = reference; e.Body = e.Body.Replace(reference, ""); break; } } if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs("2")); } e.ForwardDate = new DateTime(1900, 1, 1); e.ForwardedTo = ""; e.HandledDate = new DateTime(1900, 1, 1); e.Handled = false; if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs("Before Save")); } SaveMail(ref e); if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs("After save")); } String buildingQuery = "SELECT distinct u.username, u.email, sms.customer FROM tblSMS AS sms INNER JOIN tblBuildings AS b ON sms.building = b.Code INNER JOIN"; buildingQuery += " tblUserBuildings AS ub ON b.id = ub.buildingid INNER JOIN tblUsers AS u ON ub.userid = u.id"; buildingQuery += " WHERE (sms.sender = '" + e.SentFrom + "')"; String dsStatus = ""; DataSet dsUsers = DataHandler.getData(buildingQuery, out dsStatus); if (dsUsers != null && dsUsers.Tables.Count > 0 && dsUsers.Tables[0].Rows.Count > 0) { String msgfrom = "Astrodon Debtors System"; String subject = "New Message From - " + dsUsers.Tables[0].Rows[0]["customer"].ToString(); String message = "A new sms message has been received from the above customer. Please check the Debtor System for more information."; List <String> toMails = new List <string>(); foreach (DataRow dr in dsUsers.Tables[0].Rows) { String toMail = dr["email"].ToString(); if (!String.IsNullOrEmpty(toMail)) { toMails.Add(toMail); } } if (MailSender.SendMail(msgfrom, toMails, subject, message, false, null)) { String sentMsg = String.Format("Message sent to {0}", String.Join(";", toMails.ToArray())); if (NewMessageEvent != null) { NewMessageEvent(this, new MessageArgs(sentMsg + " " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); } } } #endregion SMS Emails } } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } for (int i = messages.Count; i > 0; i--) { DeleteMessageOnServer(hostName, port, useSSL, username, password, i); } } timer.Enabled = true; }