SMTP ���[�����M�N���X
Inheritance: IDisposable
コード例 #1
0
ファイル: MainForm.cs プロジェクト: kinokino2010/AkaneMail
        /// <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);
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: kinokino2010/AkaneMail
        /// <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;
            }
        }