コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: MailReceiveWorker.cs プロジェクト: nbhopson/QMail
        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;
                }
            }
        }