Esempio n. 1
0
        /// <summary>
        /// 画面のアカウント設定を取得する。
        /// </summary>
        private void SetAccount()
        {
            Account_DS.AccountRow row = null;
            switch (this._type)
            {
            case AccountSettingType.New:
                //新規の場合は新規行を作成
                row = this._ads.Account.NewAccountRow();
                break;

            case AccountSettingType.Edit:
                //編集の場合は編集行を設定
                row = this._ads.Account.FindByAccountName(this._beforeAccountName);
                break;
            }

            //画面の情報を取り込む
            row.AccountName      = this.txtAccount.Text;
            row.SmtpServer       = this.txtSmtpServer.Text;
            row.SmtpSenderName   = this.txtSenderName.Text;
            row.SmtpSenderMail   = this.txtSenderMail.Text;
            row.SmtpPort         = int.Parse(this.txtSmtpPort.Text);
            row.UsePopBeforeSmtp = this.chkPopBeforeSmtp.Checked;
            row.UseSmtpAuth      = this.chkSmtpAuth.Checked;
            row.PopServer        = this.txtPopServer.Text;
            row.PopUserId        = this.txtPopUser.Text;
            row.PopPassword      = CryptographyUtil.EncryptString(this.txtPopPassword.Text);
            row.PopPort          = int.Parse(this.txtPopPort.Text);

            if (this._type == AccountSettingType.New)
            {
                this._ads.Account.AddAccountRow(row);
            }
        }
Esempio n. 2
0
        //private bool _isAccountError = false;

        public ProgressForm(Account_DS.AccountRow accountRow, Address_DS addressDs, string mailSubject, string mailBody)
        {
            InitializeComponent();

            this._accountRow  = accountRow;
            this._addressDs   = addressDs;
            this._mailBody    = mailBody;
            this._mailSubject = mailSubject;
        }
Esempio n. 3
0
        /// <summary>
        /// smtpクライアントを作成する。
        /// </summary>
        /// <param name="accountRow">アカウント情報</param>
        /// <returns>smtpクライアント</returns>
        private TKMP.Net.SmtpClient CreateSMTPClient(Account_DS.AccountRow accountRow)
        {
            TKMP.Net.SmtpClient smtp = null;

            if (accountRow.UseSmtpAuth == true)
            {
                //SMTPサーバーで認証を利用する場合
                TKMP.Net.ISmtpLogon logon = new TKMP.Net.AuthLogin(accountRow.PopUserId, CryptographyUtil.DecryptString(accountRow.PopPassword));
                smtp = new TKMP.Net.SmtpClient(accountRow.SmtpServer, accountRow.SmtpPort, logon);
            }
            else
            {
                //通常送信
                smtp = new TKMP.Net.SmtpClient(accountRow.SmtpServer, accountRow.SmtpPort);
            }

            return(smtp);
        }
Esempio n. 4
0
        /// <summary>
        /// ドロップダウンに表示されている設定情報を表示する。
        /// </summary>
        private void ShowAccount()
        {
            Account_DS.AccountRow row = this._ads.Account.FindByAccountName(this.cboAccount.SelectedValue.ToString());

            this.txtAccount.Text          = row.AccountName;
            this.txtSmtpServer.Text       = row.SmtpServer;
            this.txtSenderName.Text       = row.SmtpSenderName;
            this.txtSenderMail.Text       = row.SmtpSenderMail;
            this.txtSmtpPort.Text         = row.SmtpPort.ToString();
            this.chkPopBeforeSmtp.Checked = row.UsePopBeforeSmtp;
            this.chkSmtpAuth.Checked      = row.UseSmtpAuth;
            this.txtPopServer.Text        = row.PopServer;
            this.txtPopUser.Text          = row.PopUserId;
            this.txtPopPassword.Text      = CryptographyUtil.DecryptString(row.PopPassword);
            this.txtPopPort.Text          = row.PopPort.ToString();

            this._isAccountEdited   = false;
            this._beforeAccountName = this.cboAccount.SelectedValue.ToString();
        }
Esempio n. 5
0
        /// <summary>
        /// メールを送信する。
        /// </summary>
        private void SendMail()
        {
            if (this.IsValid() == false)
            {
                return;
            }

            //送信確認を行い、OKでなければ中止する。
            if (MessageBox.Show(this, "メールを送信しますか?", "送信確認",
                                MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) != DialogResult.OK)
            {
                return;
            }

            //送信処理を実行
            Account_DS.AccountRow accountRow = this._accountds.Account.FindByAccountName(this.cboAccount.SelectedValue.ToString());
            using (ProgressForm f = new ProgressForm(accountRow, this._addressds, this.txtSubject.Text, this.txtSource.Text))
            {
                f.ShowDialog();
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Pop Before SMTPを行う。
        /// </summary>
        /// <param name="accountRow">アカウント情報</param>
        private void DoPopBeforeSMTP(Account_DS.AccountRow accountRow)
        {
            System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient();
            tcp.Connect(accountRow.PopServer, accountRow.PopPort);
            Stream ns = tcp.GetStream();

            using (StreamWriter sw = new StreamWriter(ns))
                using (StreamReader sr = new StreamReader(ns))
                {
                    sw.NewLine   = "\r\n";
                    sw.AutoFlush = true;
                    sr.ReadLine();
                    sw.WriteLine("USER {0}", accountRow.PopUserId);
                    sr.ReadLine();
                    sw.WriteLine("PASS {0}", CryptographyUtil.DecryptString(accountRow.PopPassword));
                    sr.ReadLine();
                    if (tcp.Connected)
                    {
                        sw.WriteLine("QUIT");
                        sr.ReadLine();
                    }
                    tcp.Close();
                }
        }
Esempio n. 7
0
        private void _worker_DoWork(object sender, DoWorkEventArgs e)
        {
            //送信アカウント情報を取得
            Account_DS.AccountRow accountRow = e.Argument as Account_DS.AccountRow;

            int counter        = 0;
            int clusterCounter = 0;

            Address_DS.AddressDataTable dsAddress = new Address_DS.AddressDataTable();
            for (int i = 0; i <= this._addressDs.Address.Count - 1; i++)
            {
                dsAddress.ImportRow(this._addressDs.Address[i]);
                counter += 1;

                //クラスタサイズに達し、すべてのアドレスの読み込みが終わっていなければメールを送信し、次の送信を待つ。
                if (counter == HtmlMailSender.Properties.Settings.Default.ClusterSize && (i != (this._addressDs.Address.Count - 1)))
                {
                    if (!SendMail(accountRow, dsAddress))
                    {
                        e.Result = false;
                        return;
                    }

                    //カウンタ関係を初期化
                    counter         = 0;
                    clusterCounter += 1;
                    dsAddress.Clear();

                    //一定期間を停止
                    this._writer.Write(clusterCounter.ToString());
                    int sentNumber = clusterCounter * HtmlMailSender.Properties.Settings.Default.ClusterSize;
                    this._writer.Write(sentNumber.ToString());
                    double percentage = 100 * sentNumber / this._addressDs.Address.Count;
                    this._writer.Write(percentage.ToString());
                    this._writer.Write(((int)System.Math.Ceiling(percentage)).ToString());
                    this._worker.ReportProgress((int)System.Math.Ceiling(percentage), new object[] { sentNumber });
                    this._writer.Write(string.Format("インターバルで停止中です。"));
                    this._writer.Flush();
                    System.Threading.Thread.Sleep((int)(HtmlMailSender.Properties.Settings.Default.Interval * 1000));
                }
                else if (i == this._addressDs.Address.Count - 1)
                {
                    //すべての読み込みが終わった場合は送信のみ行う。
                    if (!SendMail(accountRow, dsAddress))
                    {
                        e.Result = false;
                        return;
                    }
                }
            }

            e.Result = true;
            #region
            //            //送信アカウント情報を取得
            //Account_DS.AccountRow accountRow = e.Argument as Account_DS.AccountRow;

            ////POP  Before SMTPの場合
            //if (accountRow.UsePopBeforeSmtp == true)
            //{
            //    this.DoPopBeforeSMTP(accountRow);
            //}

            ////SMTPクライアントの作成
            //TKMP.Net.SmtpClient smtp = this.CreateSMTPClient(accountRow);

            ////接続に失敗したら、終了。
            //if (!smtp.Connect())
            //{
            //    System.Windows.Forms.MessageBox.Show("インターネット接続に失敗しました。インターネットに接続していないか、アカウント情報が間違っています。");
            //    this._isAccountError = true;
            //    return;
            //}

            //try
            //{
            //    //TODO 決まった件数をまとめてメール送信する。
            //    //TODO メール送信後、一度接続を解除する。


            //    //メール送信を開始

            //    smtp.MessageReceive += new TKMP.Net.MessageReceiveHandler(smtp_MessageReceive);
            //    smtp.MessageSend += new TKMP.Net.MessageSendHandler(smtp_MessageSend);

            //    //あて先アドレスをセット
            //    int totalCount = 0;
            //    int clusterCount = 0;
            //    foreach (Address_DS.AddressRow adder in this._addressDs.Address)
            //    {
            //        clusterCount ++;
            //        totalCount++;

            //        //メールオブジェクトの作成
            //        TKMP.Writer.MailWriter mail = new TKMP.Writer.MailWriter();

            //        //SMTPサーバーの問い合わせ用のアドレスをセット
            //        mail.FromAddress = accountRow.SmtpSenderMail;
            //        mail.ToAddressList.Add(adder.MailAddress);

            //        //Toにメーラーに表示させるにはこの行を追加
            //        //mail.Headers.Add("To", adder.MailAddress);

            //        //本文の作成。(HTMLとして認識)
            //        this.CreateMailBody(mail);

            //        //ヘッダ情報を追加
            //        this.CreateMailHeader(mail, accountRow);

            //        smtp.SendMail(mail);

            //        this._writer.Write(string.Format("{0}にメールを送信しました。", adder.MailAddress));
            //        double percentage = ((double)totalCount / (double)this._addressDs.Address.Count) * 100;

            //        if (clusterCount == HtmlMailSender.Properties.Settings.Default.ClusterSize)
            //        {
            //            //クラスタサイズに達した場合はいったんとめる。
            //            this._worker.ReportProgress((int)System.Math.Ceiling(percentage), new object[] { totalCount, true });
            //            this._writer.Write(string.Format("インターバルで停止中です。"));
            //            this._writer.Flush();
            //            System.Threading.Thread.Sleep((int)(HtmlMailSender.Properties.Settings.Default.Interval * 1000));
            //            clusterCount = 0;
            //        }
            //        else
            //        {
            //            //それ以外は情報のみを返す。
            //            this._worker.ReportProgress((int)System.Math.Ceiling(percentage), new object[] { totalCount, false });
            //        }

            //    }
            //}
            //finally
            //{
            //    //サーバーから切断
            //    smtp.Close();
            //    this._writer.Dispose();
            //}
            #endregion
        }
Esempio n. 8
0
 /// <summary>
 /// メールヘッダーを作成する
 /// </summary>
 /// <param name="mail">ヘッダーをつけたいメールオブジェクト</param>
 /// <param name="accountRow">アカウント情報</param>
 private void CreateMailHeader(TKMP.Writer.MailWriter mail, Account_DS.AccountRow accountRow)
 {
     //ヘッダ情報を追加します
     mail.Headers.Add("From", string.Format("{0} <{1}>", accountRow.SmtpSenderName, accountRow.SmtpSenderMail)); //「差出人」
     mail.Headers.Add("Subject", this._mailSubject);                                                             //メールの件名
 }
Esempio n. 9
0
        /// <summary>
        /// 引数のアカウントで引数のメールアドレスに対してメールを送信する。
        /// </summary>
        /// <param name="accountRow">アカウント</param>
        /// <param name="address">メールアドレス</param>
        /// <returns>成功すればTrue、送信に失敗すればFalseを返す。</returns>
        private bool SendMail(Account_DS.AccountRow accountRow, Address_DS.AddressDataTable address)
        {
            //0件の場合は何もせずに終了。
            if (address.Count == 0)
            {
                return(true);
            }

            //POP  Before SMTPの場合
            if (accountRow.UsePopBeforeSmtp == true)
            {
                this.DoPopBeforeSMTP(accountRow);
            }

            //SMTPクライアントの作成
            TKMP.Net.SmtpClient smtp = this.CreateSMTPClient(accountRow);

            //接続に失敗したら、終了。
            if (!smtp.Connect())
            {
                return(false);
            }

            try
            {
                //TODO 決まった件数をまとめてメール送信する。
                //TODO メール送信後、一度接続を解除する。


                //メール送信を開始

                smtp.MessageReceive += new TKMP.Net.MessageReceiveHandler(smtp_MessageReceive);
                smtp.MessageSend    += new TKMP.Net.MessageSendHandler(smtp_MessageSend);

                //あて先アドレスをセット
                //メールオブジェクトの作成
                TKMP.Writer.MailWriter mail = new TKMP.Writer.MailWriter();

                //SMTPサーバーの問い合わせ用のアドレスをセット
                mail.FromAddress = accountRow.SmtpSenderMail;
                foreach (Address_DS.AddressRow adder in address)
                {
                    mail.ToAddressList.Add(adder.MailAddress);
                }
                //Toにメーラーに表示させるにはこの行を追加
                //mail.Headers.Add("To", adder.MailAddress);

                //本文の作成。(HTMLとして認識)
                this.CreateMailBody(mail);

                //ヘッダ情報を追加
                this.CreateMailHeader(mail, accountRow);

                smtp.SendMail(mail);

                foreach (Address_DS.AddressRow adder in address)
                {
                    this._writer.Write(string.Format("{0}にメールを送信しました。", adder.MailAddress));
                }
                return(true);
            }
            finally
            {
                //サーバーから切断
                smtp.Close();
                this._writer.Dispose();
            }
        }