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