public override void Authenticate() { Logger.Debug("Authenticating connection {0}", LogSource.Channel, UniqueId); if (channelState == ChannelState.Authenticated) { return; } if (channelState != ChannelState.Connected) { Logger.Error("Unable to authenticate in current channel state. ChannelState = {0}", LogSource.Channel, channelState); throw new ChannelException("Unable to authenticate in current channel state"); } try { client.Capability(); client.YahooImap(); client.Authenticate(Username, Password); channelState = ChannelState.Authenticated; Logger.Debug("SUCCESS Authenticating connection {0}", LogSource.Channel, UniqueId); } catch (IMAP_ClientException ex) { channelState = ChannelState.Broken; Logger.Debug("FAILED Authenticating connection {0}. Server said {1}", LogSource.Channel, UniqueId, ex.ResponseText); throw new ChannelAuthenticationException(ex.ResponseText, ex); } }
private void imapRecvMail() { using (var imap_client = new IMAP_Client()) { imap_client.Connect(mailAccount.recv_server, mailAccount.recv_port, mailAccount.recv_ssl); // Call Capability even if you don't care about capabilities, it also controls IMAP client features. imap_client.Capability(); imap_client.Login(mailAccount.account, mailAccount.password); imap_client.SelectFolder("INBOX"); try { imap_total = imap_client.SelectedFolder.MessagesCount; workInfo.SetInfo("正在接收邮件列表... 请稍后"); imap_recv_messages = new List<IMAP_r_u_Fetch>(); imap_client.Fetch( false, IMAP_t_SeqSet.Parse("1:*"), new IMAP_t_Fetch_i[]{ new IMAP_t_Fetch_i_Envelope(), new IMAP_t_Fetch_i_Flags(), new IMAP_t_Fetch_i_InternalDate(), new IMAP_t_Fetch_i_Rfc822Size(), new IMAP_t_Fetch_i_Uid() }, this.callback_fetch_message_items ); if (imap_recv_messages.Count == 0) return; workInfo.SetInfo("正在接收邮件... 请稍后"); imap_total = imap_recv_messages.Count; int count = 1; imap_client.FetchGetStoreStream += imap_client_FetchGetStoreStream; foreach (IMAP_r_u_Fetch reps in imap_recv_messages) { if (isStop) return; workInfo.SetProgress(imap_total, count); current_imap_fetch = reps; string text = null; if (reps.Envelope != null) { if (reps.Envelope.Subject != null && reps.Envelope.Subject.IndexOf("&#") != -1) workInfo.AddDetail("正在接收邮件:" + (text = HttpUtility.HtmlDecode(reps.Envelope.Subject)), Colors.Black); else workInfo.AddDetail("正在接收邮件:" + (text = reps.Envelope.Subject), Colors.Black); } //--通知其他订阅人--// XElement el = new XElement("subscribe"); el.SetAttributeValue("total", imap_total); el.SetAttributeValue("count", count); el.SetAttributeValue("account", mailAccount.account); el.SetAttributeValue("type", "accept_mail"); el.SetAttributeValue("detail", "true"); el.SetAttributeValue("principal", Desktop.instance.loginedPrincipal.loginId); el.SetAttributeValue("principal_name", Desktop.instance.loginedPrincipal.name); el.SetAttributeValue("subject", "正在接收邮件:" + text); MessageManager.instance.publishMessage(mailAccount.pubId, "subscribe", el.ToString()); //-----------// imap_client.Fetch( true, IMAP_t_SeqSet.Parse(reps.UID.UID.ToString()), new IMAP_t_Fetch_i[]{ new IMAP_t_Fetch_i_Rfc822Header(), new IMAP_t_Fetch_i_Rfc822() }, this.callback_fetch_message ); count++; try { //唤醒Syncworker SyncWorker.instance.Notify(imap_total); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } } imap_client.FetchGetStoreStream -= imap_client_FetchGetStoreStream; if (imap_recv_messages.Count > 0) { SyncWorker.instance.WorkInfo = workInfo; if (SyncWorker.instance.Thread != null) SyncWorker.instance.Thread.Join(); } } catch (Exception ex) { workInfo.SetStatus(false, "邮件接收过程中发生错误:" + ex.Message); hasError = true; } } }