Authenticate() public method

POP3 �T�[�o�F�؂�s���܂��B
POP3 �T�[�o�F�؂�s���܂��B
/// �ڑ���Ԃł͂���܂���B(���������Ă��Ȃ����A�Ăяo����Ă��܂���B /// /// ID ������̓p�X���[�h�ɕ����񂪓����Ă��܂���B /// /// �T�[�o�Ƃ̌�M���ɃG���[���������܂����B /// �ɃG���[���b�Z�[�W�A /// �ɃG���[�R�[�h������܂��B ///
public Authenticate ( string id_str, string pass_str ) : void
id_str string POP3 ���[�U�[ ID
pass_str string POP3 �p�X���[�h
return void
Esempio n. 1
0
        /// <summary>
        /// POP3サーバからメールを受信する
        /// </summary>
        private void RecieveMail()
        {
            int mailCount = 0;              // 未受信メール件数

            ProgressMailInitDlg progressMailInit = ProgressMailInit;
            ProgressMailUpdateDlg progressMailUpdate = ProgressMailUpdate;
            UpdateViewDlg updateView = UpdateView;
            FlashWindowOnDlg flashWindow = FlashWindowOn;
            EnableButtonDlg enableButton = EnableButton;

            try {
                // ステータスバーに状況表示する
                labelMessage.Text = "メール受信中";

                // POP3のセッションを作成する
                using (var pop = new nMail.Pop3()) {
                    // POP3への接続タイムアウト設定をする
                    Options.EnableConnectTimeout();

                    // APOPを使用するときに使うフラグ
                    pop.APop = AccountInfo.apopFlag;

                    // POP3 over SSL/TLSフラグが有効のときはSSLを使用する
                    if (AccountInfo.popOverSSL) {
                        pop.SSL = nMail.Pop3.SSL3;
                        pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                    }
                    else {
                        // POP3へ接続する
                        pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                    }

                    // POP3への認証処理を行う
                    pop.Authenticate(AccountInfo.userName, AccountInfo.passWord);

                    // 未受信のメールが何件あるかチェックする
                    var countMail = new Task<int>(() =>
                    {
                        var uidls = Enumerable.Range(1, pop.Count).Select(i => { pop.GetUidl(i); return pop.Uidl; });
                        var locals = collectionMail[RECEIVE].Union(collectionMail[DELETE]);
                        var unreadMails = from u in uidls
                                          join l in locals on u equals l.uidl
                                          select l;
                        return unreadMails.Count();
                    });
                    countMail.Start();

                    // POP3サーバ上に1件以上のメールが存在するとき
                    if (pop.Count > 0) {
                        // ステータスバーに状況表示する
                        labelMessage.Text = pop.Count + "件のメッセージがサーバ上にあります。";
                    }
                    else {
                        // ステータスバーに状況表示する
                        labelMessage.Text = "新着のメッセージはありませんでした。";

                        // メール受信のメニューとツールボタンを有効化する
                        Invoke(enableButton, 1);
                        return;
                    }

                    var receivedCount = countMail.Result;
                    // 受信済みメールカウントがPOP3サーバ上にあるメール件数と同じとき
                    if (receivedCount == pop.Count) {
                        // ステータスバーに状況表示する
                        labelMessage.Text = "新着のメッセージはありませんでした。";

                        // プログレスバーを非表示に戻す
                        Invoke(new ProgressMailDisableDlg(ProgressMailDisable));

                        // メール受信のメニューとツールボタンを有効化する
                        Invoke(enableButton, 1);

                        return;
                    }

                    // プログレスバーを表示して最大値を未受信メール件数に設定する
                    int mailCountMax = pop.Count - receivedCount;
                    Invoke(progressMailInit, mailCountMax);

                    // 未受信のメールを取得するためカウントを1増加させる
                    receivedCount++;

                    // 取得したメールをコレクションに追加する
                    for (int no = receivedCount; no <= pop.Count; no++) {
                        // 受信中件数を表示
                        labelMessage.Text = no + "件目のメールを受信しています。";

                        // メールのUIDLを取得する
                        pop.GetUidl(no);

                        // HTML/Base64のデコードを無効にする
                        Options.DisableDecodeBodyText();

                        // メールの情報を取得する
                        pop.GetMail(no);

                        // メールの情報を格納する
                        Mail mail = new Mail(pop.From, pop.Header, pop.Subject, pop.Body, pop.FileName, pop.DateString, pop.Size.ToString(), pop.Uidl, true, "", pop.GetDecodeHeaderField("Cc:"), "", Mail.ParsePriority(pop.Header));
                        collectionMail[RECEIVE].Add(mail);

                        // 受信メールの数を増加する
                        mailCount++;

                        // メール受信時にPOP3サーバ上のメール削除のチェックがある時はPOP3サーバからメールを削除する
                        if (AccountInfo.deleteMail) {
                            pop.Delete(no);
                        }

                        // メールの受信件数を更新する
                        Invoke(progressMailUpdate, mailCount);

                        // スレッドを1秒間待機させる
                        System.Threading.Thread.Sleep(1000);
                    }
                }

                // プログレスバーを非表示に戻す
                Invoke(new ProgressMailDisableDlg(ProgressMailDisable));

                // メール受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);

                // 未受信メールが1件以上の場合
                if (mailCount >= 1) {
                    // メール着信音の設定をしている場合
                    if (AccountInfo.popSoundFlag && AccountInfo.popSoundName != "") {
                        SoundPlayer sndPlay = new SoundPlayer(AccountInfo.popSoundName);
                        sndPlay.Play();
                    }

                    // ウィンドウが最小化でタスクトレイに格納されていて何分間隔かで受信をするとき
                    if (this.WindowState == FormWindowState.Minimized && AccountInfo.minimizeTaskTray && AccountInfo.autoMailFlag) {
                        notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
                        notifyIcon1.BalloonTipTitle = "新着メール";
                        notifyIcon1.BalloonTipText = mailCount + "件の新着メールを受信しました。";
                        notifyIcon1.ShowBalloonTip(300);
                    }
                    else {
                        // 画面をフラッシュさせる
                        Invoke(flashWindow);

                        // ステータスバーに状況表示する
                        labelMessage.Text = mailCount + "件の新着メールを受信しました。";
                    }

                    // データ変更フラグをtrueにする
                    dataDirtyFlag = true;
                }
                else {
                    // ステータスバーに状況表示する
                    labelMessage.Text = "新着のメッセージはありませんでした。";

                    // メール受信のメニューとツールボタンを有効化する
                    Invoke(enableButton, 1);

                    return;
                }
            }
            catch (nMail.nMailException nex) {
                // ステータスバーに状況表示する
                labelMessage.Text = "エラーNo:" + nex.ErrorCode + " エラーメッセージ:" + nex.Message;

                // メール受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);

                return;
            }
            catch (Exception exp) {
                // ステータスバーに状況表示する
                labelMessage.Text = "エラーメッセージ:" + exp.Message;

                // メール受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);

                return;
            }

            // TreeViewとListViewの更新を行う
            Invoke(updateView, 0);
        }
Esempio n. 2
0
        /// <summary>
        /// メールを送信する
        /// </summary>
        private void SendMail()
        {
            ProgressMailInitDlg progressMailInit = ProgressMailInit;
            ProgressMailUpdateDlg progressMailUpdate = ProgressMailUpdate;
            UpdateViewDlg updateView = UpdateView;
            EnableButtonDlg enableButton = EnableButton;

            int max_no = 0;
            int send_no = 0;

            // 送信可能なメールの数を確認する
            max_no = collectionMail[SEND].Count(m => m.notReadYet);

            // 送信可能なメールが存在しないとき
            if (max_no == 0) {
                // メール送信・受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);
                return;
            }

            try {
                // ステータスバーに状況表示する
                labelMessage.Text = "メール送信中";

                // プログレスバーを表示して最大値を未送信メール件数に設定する
                Invoke(progressMailInit, max_no);

                // POP before SMTPが有効の場合
                if (AccountInfo.popBeforeSMTP) {
                    try {
                        // POP3のセッションを作成する
                        using (var pop = new nMail.Pop3()) {
                            // POP3への接続タイムアウト設定をする
                            Options.EnableConnectTimeout();

                            // APOPを使用するときに使うフラグ
                            pop.APop = AccountInfo.apopFlag;

                            // POP3 over SSL/TLSフラグが有効のときはSSLを使用する
                            if (AccountInfo.popOverSSL) {
                                pop.SSL = nMail.Pop3.SSL3;
                                pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                            }
                            else {
                                // POP3へ接続する
                                pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                            }

                            // POP3への認証処理を行う
                            pop.Authenticate(AccountInfo.userName, AccountInfo.passWord);
                        }
                    }
                    catch (nMail.nMailException nex) {
                        // ステータスバーに状況表示する
                        labelMessage.Text = "エラーNo:" + nex.ErrorCode + " エラーメッセージ:" + nex.Message;

                        // メール送信・受信のメニューとツールボタンを有効化する
                        Invoke(enableButton, 1);

                        return;
                    }
                    catch (Exception exp) {
                        // ステータスバーに状況表示する
                        labelMessage.Text = "エラーメッセージ:" + exp.Message;

                        // メール送信・受信のメニューとツールボタンを有効化する
                        Invoke(enableButton, 1);

                        return;
                    }
                }

                // SMTPのセッションを作成する
                using (var smtp = new nMail.Smtp(AccountInfo.smtpServer)) {
                    smtp.Port = AccountInfo.smtpPortNumber;

                    // SMTP認証フラグが有効の時はSMTP認証を行う
                    if (AccountInfo.smtpAuth) {
                        // SMTPサーバに接続
                        smtp.Connect();

                        // SMTP認証を行う
                        smtp.Authenticate(AccountInfo.userName, AccountInfo.passWord, Smtp.AuthPlain | Smtp.AuthCramMd5);
                    }

                    foreach (var mail in collectionMail[SEND]) {
                        if (mail.notReadYet) {
                            // CCが存在するとき
                            if (mail.cc != "") {
                                // CCの宛先を設定する
                                smtp.Cc = mail.cc;
                            }

                            // BCCが存在するとき
                            if (mail.bcc != "") {
                                // BCCの宛先を設定する
                                smtp.Bcc = mail.bcc;
                            }

                            // 添付ファイルを指定している場合
                            if (mail.attach != "") {
                                smtp.FileName = mail.attach;
                            }

                            // 追加ヘッダをつける
                            smtp.Header = "\r\nPriority: " + mail.priority + "\r\nX-Mailer: Akane Mail Version " + Application.ProductVersion;

                            // 差出人のアドレスを編集する
                            string fromAddress = AccountInfo.FromAddress;

                            // 送信する
                            smtp.SendMail(mail.address, fromAddress, mail.subject, mail.body);

                            // 送信日時を設定する
                            mail.date = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString();

                            // 送信済みに変更する
                            mail.notReadYet = false;

                            // メールの送信件数を更新する
                            send_no++;
                            Invoke(progressMailUpdate, send_no);

                            // スレッドを1秒間待機させる
                            System.Threading.Thread.Sleep(1000);
                        }
                    }
                }

                // プログレスバーを非表示に戻す
                Invoke(new ProgressMailDisableDlg(ProgressMailDisable));

                // ボタンとメニューを有効化する
                Invoke(enableButton, 1);

                // ステータスバーに状況表示する
                labelMessage.Text = "メール送信完了";
            }
            catch (nMail.nMailException nex) {
                // ステータスバーに状況表示する
                labelMessage.Text = "エラーNo:" + nex.ErrorCode + " エラーメッセージ:" + nex.Message;

                // メール送信・受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);

                return;
            }
            catch (Exception exp) {
                // ステータスバーに状況表示する
                labelMessage.Text = "エラーメッセージ:" + exp.Message;

                // メール送信・受信のメニューとツールボタンを有効化する
                Invoke(enableButton, 1);

                return;
            }

            // TreeViewとListViewの更新を行う
            Invoke(updateView, 1);
        }
Esempio n. 3
0
        /// <summary>
        /// 直接メール送信
        /// </summary>
        /// <param name="address">宛先</param>
        /// <param name="cc">CCのアドレス</param>
        /// <param name="bcc">BCCのアドレス</param>
        /// <param name="subject">件名</param>
        /// <param name="body">本文</param>
        /// <param name="attach">添付メールリスト</param>
        /// <param name="priority">重要度</param>
        /// <returns>なし</returns>
        public void DirectSendMail(string address, string cc, string bcc, string subject, string body, string attach, string priority)
        {
            try {
                // ステータスバーに状況表示する
                labelMessage.Text = "メール送信中";

                // POP before SMTPが有効の場合
                if (AccountInfo.popBeforeSMTP) {
                    try {
                        // POP3のセッションを作成する
                        using (var pop = new Pop3()) {
                            // POP3への接続タイムアウト設定をする
                            Options.EnableConnectTimeout();

                            // APOPを使用するときに使うフラグ
                            pop.APop = AccountInfo.apopFlag;

                            // POP3 over SSL/TLSフラグが有効のときはSSLを使用する
                            if (AccountInfo.popOverSSL) {
                                pop.SSL = Pop3.SSL3;
                                pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                            }
                            else {
                                // POP3へ接続する
                                pop.Connect(AccountInfo.popServer, AccountInfo.popPortNumber);
                            }

                            // POP3への認証処理を行う
                            pop.Authenticate(AccountInfo.userName, AccountInfo.passWord);
                        }
                    }
                    catch (nMail.nMailException nex) {
                        labelMessage.Text = "エラーNo:" + nex.ErrorCode + " エラーメッセージ:" + nex.Message;
                        return;
                    }
                    catch (Exception exp) {
                        // ステータスバーに状況表示する
                        labelMessage.Text = "エラーメッセージ:" + exp.Message;
                        return;
                    }
                }

                // SMTPのセッションを作成する
                using (var smtp = new Smtp(AccountInfo.smtpServer)) {
                    smtp.Port = AccountInfo.smtpPortNumber;

                    // SMTP認証フラグが有効の時はSMTP認証を行う
                    if (AccountInfo.smtpAuth) {
                        // SMTPサーバに接続
                        smtp.Connect();
                        // SMTP認証を行う
                        smtp.Authenticate(AccountInfo.userName, AccountInfo.passWord, Smtp.AuthPlain | Smtp.AuthCramMd5);
                    }

                    // CCが存在するとき
                    if (cc != "") {
                        // CCの宛先を設定する
                        smtp.Cc = cc;
                    }

                    // BCCが存在するとき
                    if (bcc != "") {
                        // BCCの宛先を設定する
                        smtp.Bcc = bcc;
                    }

                    // 添付ファイルを指定している場合
                    if (attach != "") {
                        smtp.FileName = attach;
                    }

                    // 追加ヘッダをつける
                    smtp.Header = "\r\nPriority: " + priority + "\r\nX-Mailer: Akane Mail Version " + Application.ProductVersion;

                    // 差出人のアドレスを編集する
                    string fromAddress = AccountInfo.FromAddress;

                    // 送信する
                    smtp.SendMail(address, fromAddress, subject, body);
                }

                // ステータスバーに状況表示する
                labelMessage.Text = "メール送信完了";
            }
            catch (nMail.nMailException nex) {
                labelMessage.Text = "エラーNo:" + nex.ErrorCode + " エラーメッセージ:" + nex.Message;
                return;
            }
            catch (Exception exp) {
                labelMessage.Text = "エラーメッセージ:" + exp.Message;
                return;
            }
        }