1年近く間を空けてしまった。。。
その間にVisual Studioは新しいバージョンが出たり、ずいぶん環境も変わったので、このブログでキャッチアップしていけたらと思う。
(ちゃんと更新しないと)
今回は未来の自分に向かってリマインドメールを送るコード。
本当はバックグラウンドで実行、とか考えないといけないのだろうけど、とりあえず今は無理しない。。。
■参考にしたのは下記(相変わらず参考にさせてもらっている。こういう人を目指したい。。。)
DOBON.NET SmtpClientクラスを使ってメールを送信する
http://dobon.net/vb/dotnet/internet/smtpclient.html
プログラムは大きく下の3パートに分けて考える。
(A)送信時間の設定(GUI)から
(B) メールの送信メソッド
(C) 時間が来たら処理(B)を実行するイベントハンドラ
Bについては、C#だし(簡単そうだから)Microsoftのhotmailを使ってやってみる。
CはツールボックスのTimerを使って、画面で入力した時間がきたら処理(メール送信)を行う。
という風につくってみる。
まず(A)の画面を作成する。

各コンポーネントの設定は下記のとおり
①(Name): dateTimePicker1
加えてCustomFormatをyyyy/MM/ddに設定する。
②(Name):numericUpDownHour
Maximumを11に設定
③(Name):numericUpDownMin
Maximumを59に設定
④(Name):textBoxMessage
MultilineをTrueに設定
⑤(Name):label1
⑥(Name):button1
Text:送信予約
さらにTimerをForm1にドラッグする。→timer1(Intervalは100(ms))
つぎに、今回のプログラムでつかう変数を宣言(それぞれの変数の使用方法は後述)
つづいて、メールを送る時刻を画面から取得する処理。
操作としては、画面上で時刻を選択(dateTimePicker1、numericUpDownHour、numericUpDownMin)しておいて、ボタン(button1)をクリックすると、送信時刻が設定され、タイマー(Timer1)が起動される感じにする。
(本当はdateTimePickerだけで時刻も指定したかったんだけど、どうしても上手くできずこの形になってしまった。)
つぎに(B)、メール送信のshotMailメソッドをつくる。
xxxx@hotmail.comがyyyy@gmail.comにメールを送るコード
送信に使うメール(xxxx@hotmail.com)のパスワードは『password』ってことにする。。
送るメッセージの題名は「自分からのメッセージ」内容はtextBoxMessageから取得
あとは、おまじないかな。hotmailのSMTPサーバへメールを送るためのクライアントをインスタンス化、ホスト名、ポート番号指定とか。。。
その間にVisual Studioは新しいバージョンが出たり、ずいぶん環境も変わったので、このブログでキャッチアップしていけたらと思う。
(ちゃんと更新しないと)
今回は未来の自分に向かってリマインドメールを送るコード。
本当はバックグラウンドで実行、とか考えないといけないのだろうけど、とりあえず今は無理しない。。。
■参考にしたのは下記(相変わらず参考にさせてもらっている。こういう人を目指したい。。。)
DOBON.NET SmtpClientクラスを使ってメールを送信する
http://dobon.net/vb/dotnet/internet/smtpclient.html
プログラムは大きく下の3パートに分けて考える。
(A)送信時間の設定(GUI)から
(B) メールの送信メソッド
(C) 時間が来たら処理(B)を実行するイベントハンドラ
Bについては、C#だし(簡単そうだから)Microsoftのhotmailを使ってやってみる。
CはツールボックスのTimerを使って、画面で入力した時間がきたら処理(メール送信)を行う。
という風につくってみる。
まず(A)の画面を作成する。

各コンポーネントの設定は下記のとおり
①(Name): dateTimePicker1
加えてCustomFormatをyyyy/MM/ddに設定する。
②(Name):numericUpDownHour
Maximumを11に設定
③(Name):numericUpDownMin
Maximumを59に設定
④(Name):textBoxMessage
MultilineをTrueに設定
⑤(Name):label1
⑥(Name):button1
Text:送信予約
さらにTimerをForm1にドラッグする。→timer1(Intervalは100(ms))
つぎに、今回のプログラムでつかう変数を宣言(それぞれの変数の使用方法は後述)
DateTime targetDate;
int targetHour;
int targetMinute;
DateTime datetime_set;
bool isSend = false;
int targetHour;
int targetMinute;
DateTime datetime_set;
bool isSend = false;
つづいて、メールを送る時刻を画面から取得する処理。
操作としては、画面上で時刻を選択(dateTimePicker1、numericUpDownHour、numericUpDownMin)しておいて、ボタン(button1)をクリックすると、送信時刻が設定され、タイマー(Timer1)が起動される感じにする。
(本当はdateTimePickerだけで時刻も指定したかったんだけど、どうしても上手くできずこの形になってしまった。)
private void button1_Click(object sender, EventArgs e)
{
{
targetDate = dateTimePicker1.Value;
targetHour = (int)numericUpDownHour.Value;
targetMinute = (int)numericUpDownMin.Value;
datetime_set = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, targetHour, targetMinute, 0;
//一応過去時間になってないか入力チェック
if(DateTime.Now.CompareTo(datetime_set)>0)
{
else
{
//ここでタイマーを開始して、以降の時刻をチェックする
timer1.Start();
}targetHour = (int)numericUpDownHour.Value;
targetMinute = (int)numericUpDownMin.Value;
datetime_set = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, targetHour, targetMinute, 0;
//一応過去時間になってないか入力チェック
if(DateTime.Now.CompareTo(datetime_set)>0)
{
MessageBox.Show("未来の時間を入力してください");
}else
{
MessageBox.Show(datetime_set.ToString() + "にメールを送信します");
isSend = true;
}isSend = true;
//ここでタイマーを開始して、以降の時刻をチェックする
timer1.Start();
つぎに(B)、メール送信のshotMailメソッドをつくる。
xxxx@hotmail.comがyyyy@gmail.comにメールを送るコード
送信に使うメール(xxxx@hotmail.com)のパスワードは『password』ってことにする。。
送るメッセージの題名は「自分からのメッセージ」内容はtextBoxMessageから取得
あとは、おまじないかな。hotmailのSMTPサーバへメールを送るためのクライアントをインスタンス化、ホスト名、ポート番号指定とか。。。
private void shotMail()
{
{
//MailMessageの作成
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーなどを設定する
sc.Host = "smtp.live.com";
sc.Port = 587;
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//ユーザー名とパスワードを設定する
sc.Credentials = new System.Net.NetworkCredential("xxxx@hotmail.com", "password");
//SSLを使用する
sc.EnableSsl = true;
//メッセージを送信する
sc.Send(msg);
//後始末
msg.Dispose();
sc.Dispose();
}System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(
"xxxx@hotmail.com", "yyyy@gmail.com",
"自分からのメッセージ", textBoxMessage.Text);
"自分からのメッセージ", textBoxMessage.Text);
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーなどを設定する
sc.Host = "smtp.live.com";
sc.Port = 587;
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//ユーザー名とパスワードを設定する
sc.Credentials = new System.Net.NetworkCredential("xxxx@hotmail.com", "password");
//SSLを使用する
sc.EnableSsl = true;
//メッセージを送信する
sc.Send(msg);
//後始末
msg.Dispose();
sc.Dispose();
つぎに(c)
タイマーは、画面を作ったときにIntervalを100(ms)の指定したので、この間隔で現在時刻を確認して、画面から指定した時間と一致したら shotMail()メソッドを実行してメールを送信するコードを作る。
以下。
private void timer1_Tick(object sender, EventArgs e)
{
{
DateTime datetime_now = DateTime.Now;
label1.Text = datetime_now.ToLongTimeString();
if (datetime_now.ToLongTimeString() == datetime_set.ToLongTimeString() && isSend==true)
{
}if (datetime_now.ToLongTimeString() == datetime_set.ToLongTimeString() && isSend==true)
{
shotMail();
label1.Text = "メールを送信しました";
isSend = false;
timer1.Stop();
}label1.Text = "メールを送信しました";
isSend = false;
timer1.Stop();
これで完成。
1分後を指定して実行してみる。

1分後、label1が「メールを送信しました」に変わった。

メールをチェック!
届いてる!!!

1年間時間を空けて(空いてしまって)それなりにネタもたまったので、今度こそ2週に1回くらいは更新していこうと思います。。。