/// <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); }
/// <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(); } }