using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace GroundZero.KeyCodes { public partial class ALRequests : Form { private bool _xmlMode=true; public ALRequests(bool XMLMode) { InitializeComponent(); _xmlMode=XMLMode; } private bool m_abortAtNextHeartbeat = false; private Chilkat.EmailBundle bundle=null; private void checkForRequestsToolStripMenuItem_Click(object sender, EventArgs e) { GetRequestsFromImapServer(); } private void GetRequestsFromImapServer() { abortToolStripMenuItem.Visible = true; // Any IMAP method call may be progress monitored and aborted. // This example demonstrates how to do it. Chilkat.Imap imap = new Chilkat.Imap(); bool success; toolStripStatusLabel1.Text = "Unlock Chilkat..."; // Anything unlocks the component and begins a fully-functional 30-day trial. success = imap.UnlockComponent("SAyanovaIMAPMAIL_Es9JHNMSlUlb"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } // IMPORTANT: To enable events, make sure the EnableEvents property is set to true. imap.EnableEvents = true; // This example describes two event callbacks: AbortCheck and PercentDone: imap.OnAbortCheck += new Chilkat.Imap.AbortCheckEventHandler(imap_OnAbortCheck); imap.OnPercentDone += new Chilkat.Imap.PercentDoneEventHandler(imap_OnPercentDone); // The AbortCheck event is fired periodically during any method call that communicates // with the IMAP server. The rate of firing is controlled by the HeartbeatMs property. // If set to 0 (the default), then no AbortCheck events are fired. Otherwise, // the HeartbeatMs property is the number of milliseconds between AbortCheck events. imap.HeartbeatMs = 100; // Set it to 100 milliseconds. // NOTE: The PercentDone event is only fired for methods where it makes sense. // For example, the AbortCheck event is fired during a Connect method call, // but the PercentDone is not. (It's not really possible to know the percentage // completion for a Connect -- the IMAP client simply waits for the server to accept // the connection. However, when downloading 100 email headers, it's 50% done // when 50 email headers have been downloaded, and that makes sense. When downloading // a single email that is 100K in size, it's 50% done when 50K has been downloaded, // again -- it makes sense. If the PercentDone event does not fire -- ask yourself // if it even make sense.) // Now that events have been enabled, and event handlers are set, // the remainder of the code is identical to code that does not use events. // Skip down to review the OnPercentDone and OnAbortCheck events. // If you have an "Abort" button in your user-interface, you may wish // to give it focus prior to calling progress-monitored methods: menuStrip1.Focus(); // Connect to an IMAP server. toolStripStatusLabel1.Text = "Connecting to mail.ayanova.com ..."; //Use SSL case 1973 imap.Ssl = true; imap.Port = 993; success = imap.Connect("mail.ayanova.com"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } // Login toolStripStatusLabel1.Text = "Logging in..."; success = imap.Login("support@ayanova.com", "RLdUP6758a6191H"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } // Select an IMAP mailbox toolStripStatusLabel1.Text = "Selecting Inbox..."; success = imap.SelectMailbox("Inbox"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } Chilkat.MessageSet messageSet = null; // We can choose to fetch UIDs or sequence numbers. bool fetchUids; fetchUids = true; // Get the message IDs for all emails with "SSL" in the subject. toolStripStatusLabel1.Text = "Searching ..."; //Tested oct 3 2011 this now works and only gathers new requests and now doesn't pick up people's replies to the keycode message messageSet = imap.Search("UNANSWERED UNDELETED TEXT \"noreply@ayanova.com\" SUBJECT \"Request for 30 day temporary\"", fetchUids); //messageSet = imap.Search("UNANSWERED SUBJECT \"Request for 30 day temporary\"", fetchUids); //noreply@ayanova.com // Fetch the email headers into an email bundle. toolStripStatusLabel1.Text = "Fetching..."; bundle = imap.FetchBundle(messageSet); if (bundle == null) { MessageBox.Show("Failed to fetch mail bundle!"); imap.SaveLastError("errorLog.xml"); return; } bundle.SortByDate(false); // Loop over the bundle and display the FROM and SUBJECT of each. grid.Rows.Clear(); int i; for (i = 0; i <= bundle.MessageCount - 1; i++) { Chilkat.Email email = null; email = bundle.GetEmail(i); grid.Rows.Add(email.GetImapUid().ToString(), email.FromAddress + ": " + email.Subject + " - " + email.LocalDate.ToString()); } // Disconnect from the IMAP server. imap.Disconnect(); abortToolStripMenuItem.Visible = false; toolStripStatusLabel1.Text = "Done..."; toolStripProgressBar1.Value = 0; } void imap_OnPercentDone(object sender, Chilkat.PercentDoneEventArgs args) { // Update the progress bar. // args.PercentDone is an integer value that has a value from 0 to 100. toolStripProgressBar1.Value = args.PercentDone; } // This is called periodically according to the HeartbeatMs void imap_OnAbortCheck(object sender, Chilkat.AbortCheckEventArgs args) { // To abort any Chilkat IMAP method call, simply set the // args.Abort property to true: if (m_abortAtNextHeartbeat) { args.Abort = true; m_abortAtNextHeartbeat = false; abortToolStripMenuItem.Visible = false; toolStripStatusLabel1.Text = "Abort!"; } // Keep the user-interface responsive by allowing UI events to be processed: Application.DoEvents(); } private void abortToolStripMenuItem_Click(object sender, EventArgs e) { m_abortAtNextHeartbeat = true; } private void grid_CellClick(object sender, DataGridViewCellEventArgs e) { // Ignore clicks that are not on button cells. if (e.RowIndex < 0 || e.ColumnIndex != grid.Columns["Process"].Index) return; // Retrieve the task ID. string msgID = grid[0, e.RowIndex].Value.ToString(); Chilkat.Email em=bundle.GetEmail(e.RowIndex); if (em.Uidl==msgID) MessageBox.Show("Error UIDL not equal to message ID from grid. Tell Johnny."); else { string s = ""; if (!string.IsNullOrWhiteSpace(em.GetPlainTextBody())) s = em.GetPlainTextBody(); else s = em.Body; ALResponse alr = new ALResponse(em,_xmlMode); if(alr.ShowDialog()== System.Windows.Forms.DialogResult.Yes) FlagImapEmailAnswered(em); GetRequestsFromImapServer(); } } public static void FlagImapEmailAnswered(Chilkat.Email em) { Chilkat.Imap imap = new Chilkat.Imap(); bool success; success = imap.UnlockComponent("SAyanovaIMAPMAIL_Es9JHNMSlUlb"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } //Use SSL case 1973 imap.Ssl = true; imap.Port = 993; success = imap.Connect("mail.ayanova.com"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } // Login success = imap.Login("support@ayanova.com", "RLdUP6758a6191H"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } // Select an IMAP mailbox success = imap.SelectMailbox("Inbox"); if (success != true) { MessageBox.Show(imap.LastErrorText); return; } success = imap.SetMailFlag(em, "Answered", 1); if (success != true) { MessageBox.Show(imap.LastErrorText); } imap.Logout(); imap.Disconnect(); } private void ALRequests_Load(object sender, EventArgs e) { GetRequestsFromImapServer(); } //mailman.UnlockComponent("SAyanovaMAILQ_46WCmUg3lQ1i"); } }