SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
東南アジアをバックパッカーしながら転職活動をした記録
東南アジアをバックパッカーしながら転職活動をした記録
7年目で初の転職活動 2カ月で内定獲得した記録
7年目で初の転職活動 2カ月で内定獲得した記録
おすすめのプログラミングスクール めざせ就職・年収アップ!
おすすめのプログラミングスクール めざせ就職・年収アップ!
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
ブログ開始3年が経った月収が1万超えてた!
ブログ開始3年が経った月収が1万超えてた!
プログラミング独学・スクール・就職(目次)
プログラミング独学・スクール・就職(目次)
previous arrowprevious arrow
next arrownext arrow
 
Shadow
C#/VB.net

C#アプリ開発 メールお知らせアプリ

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこでいつも「システムやアプリ開発をしたソースコードのサンプルが欲しい」と思っていました。

そこで作ったのが「イベント事前お知らせアプリ」です。

GoogleSpreadSheetから自動で予定をメールお知らせ 予定がいっぱいあると、忘れてしまいがちなので、事前に通知してくれるアプリが欲しいと思っていました。 なので、以前C#で予定...

こちらからダウンロードできます。

必要なデータベース(SQLite)やモジュール、ソースコードもダウンロード可能です。

デモンストレーションで動かした動画を載せておきます。

C#でプログラミングを勉強している方の勉強に役立つよう、ソースコードも公開します。

このアプリのソースを読んだり、改修したりして勉強になればと思います。

では早速紹介していきます。

イベント事前お知らせアプリ(ENIA)の紹介

ENIAとは

Evnets Notificate In Advanceの略です。

日本語にすると「イベント事前お知らせアプリ」です。

イベントや予定を登録しておいて、予定日が近づくとメール送信でお知らせするアプリです。

Windowsフォームアプリで、C#で作っています。

実際にイベントを登録した後、自動メールが送信できます。

送信メールこんな感じで送信されます。

ENIAの全体図

アプリのシステム的な全体図を説明しておきます。

以下の通りです。

①ユーザがPC上でイベント登録
②アプリがデータベース(SQLite)へ更新
③バッチファイルが起動し、メールを送信

開発環境

開発環境はVisual Studio 2015で使ったいるデータベースはSQLiteです。

SQLiteは実際の開発で使われることは少ないと思います。

ただ、SQLServerなどをインストールする必要もなく、軽いアプリなのでSQLiteをつかいました。

それぞれ、以下からダウンロードしてください。

SQLite DB.Browser

Visual Studio 2015(Community)

開発したファイルのダウンロード方法

開発したソースコードとビルドしたモジュールをダウンロードできます。

こちらからダウンロードできます。

モチベーションが上下したこともありますが、、たぶん2年くらいかかりました。

プログラミングの初心者から中級くらいの方には参考になるはずです

参考書を買うよりは価値があるのではないかと思います。

ENIAはこんな人におすすめ

ENIAをダウンロードして意味があるのは以下のような方です。

こんな人におすすめ

・基本的なことが分かっている人(変数、クラス、オブジェクト指向…etc)

・C#の初心者~中級者(3カ月~2年程度)

・いろんなコードの書き方を知っていきたい人

ソースコードを読んで理解する練習に使えると思います。

また、理解した後は、あなたのアイディアで改修を行ってさらに技術力がアップできると思います。

アプリの初期設定

ENIAのアプリを使う前に行う初期設定の説明です。

ファイルの配置先

ダウンロードしたファイルをC:\以下に配置してください。

配置後の状態は以下のようになります。

VisualStudio2015のインストール

開発環境はVisualStudio2015なのでインストールが必要です。

設定は特に必要なく、標準インストールで良いです。

1時間くらいかかります。

こちらからダウンロードできます。

Visual Studio 2015(Community)

DB.Browser.for.SQLiteのインストール

SQLiteは専用ソフトがないとデータベースを開いて中を見ることができません。

開くとこんな感じで見ることができます。

こちらからダウンロードできます。

SQLite DB.Browser

メール送信元の設定

以下に配置しているcsvに送信するメールアドレスの情報を記載します。

ファイルの場所

~ENIA_BATCH\references\SenderEmailServerInfo.csv

YahooJapanとGmailの2種類を紹介します。

YahooJapan

UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。

SenderEmailAddresは送信元のメールアドレスで、abc@yahoo.co.jpのようになります。

UserNameはYahooの場合、メールアドレスの「@」より前を入力します。

上で言うと、abcがUserNameにあたります。

PassWordはメールアドレスのパスワードです。

SMTPServer smtp.mail.yahoo.co.jp
PortNumber 465
UserName abc
PassWord パスワードを入力
SenderEmailAddres abc@yahoo.co.jp
CertificateMethod LOGIN
SSLEncryption TRUE
SSLType SSL

 

Gmail

こちらもYahooと同じで、UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。

SenderEmailAddresは送信元のメールアドレスで、xyz@gmail.comのようになります。

UserNameはメールアドレスの「@」より前を入力します。

上で言うと、xyzがUserNameにあたります。

PassWordはメールアドレスのパスワードです。

SMTPServer smtp.gmail.com
PortNumber 465
UserName xyz
PassWord パスワードを入力
SenderEmailAddres xyz@gmail.com
CertificateMethod LOGIN
SSLEncryption TRUE
SSLType SSL

 

補足ですが、Gmailからメール送信する場合、アクセス許可を設定する必要があります。

以下URLから設定変更できます。

https://myaccount.google.com/lesssecureapps

タスクスケジューラの設定

画面でイベント情報を登録した後、バッチ処理でメールが送信されます。

定時でバッチ処理を実行するには「タスクスケジューラ」を使います。

以下をご参考下さい。

https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020402

補足

『9「プログラム/スクリプト」ボックスの右側の「参照」をクリックします。』

開始オプションはバッチファイルが配置されているフォルダを指定すればOKです。

ENIAの場合、「C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bat」です。

また、普通のPCはシャットダウンされているとタスクスケジューラは動きません

ENIA_BATCHの概要説明(仕様)

バッチ処理の概要説明です。

b10_0101(イベント情報メール送信)

イベント情報を抽出して、宛先別にメールを送信する処理をしています。

簡単に概要設計を残していたので、ご参照下さい。DB定義

設計書はこちらからダウンロード可能です。

メール送信やXMLファイルの読込については以下で解説しています。

C# XMLファイルを読み込む外部ファイルとしてXMLファイルにシステムの固定情報を載せておいて、そこから読み込んで使うことってときどきありますよね。 http...
C#.net メール送信メールを送信するツールを作ってみたいなと思って色々調べていると、 フリーでメール送信できるdllがありました。 使い方備忘録とし...

b10_0102(送信履歴更新)

メール送信時に、送信した履歴をデータベースに更新しています。

この処理は「b10_0101(イベント情報メール送信)」の中で呼び出しています。

簡単に概要設計を残していたので、ご参照下さい。

設計書はこちらからダウンロード可能です。

送信履歴があるイベントは、「イベント情報一覧・編集」のデータグリッドビュー上で、黄色く表示されます。

b90_0101(初期テーブル作成)

最初にSQLiteのテーブルを作成するバッチです。

使う必要はありません。

最初からデータベースファイルをダウンロードできるようにしています。

ちゃんと動かないので、興味のある方は解読して、使ってみて下さい…

 

データベース定義書はこちらからダウンロードできます。

補足

バッチはException発生時にlogフォルダのファイルに吐き出します。

メール送信が上手くされなかった場合はここのログを確認してください。

パス:~ENIA_BATCH\log\log_batch.txt

ENIA_ONLINEの概要説明(仕様)

画面の説明です。

こちらはバッチ処理のように概要設計を作っていません。

処理内容の大枠は画面を動かしてご確認ください。

デモの動画も上記で紹介しているので、イメージいただけると思います。

詳細はC#のプログラムを読んでください。

コードメンテナンス画面

メール送信の宛先を登録・更新・削除するメンテナンス画面です。

画面左上のリストボックスで「宛先組合せ名」を選択すると、

テキストボックスとデータグリッドビューにデータを表示します。

メールアドレスはTo、Cc、Bccを設定することができます。

また、カンマ(,)区切りで複数登録可能です。

C# DatatableをDatagridViewへを表示 C#でDatatableをDatagridViewへを表示する方法を紹介します。 端的に言うと、Datatableの列名と...

イベント一括登録画面

文字通りイベントを一括登録する画面です。

データグリッドビューに入力した内容ですべて登録します。

「日付」の列にフォーカスが当たると、カレンダーの子画面が開きます。

子画面上で確定を押すと、選択した日付が「イベント一括登録」画面に反映されます。

「宛先組合せ」の列にフォーカスが当たると、宛先組合せの子画面が開きます。

子画面上で確定を押すと、選択した宛先が「イベント一括登録」画面に反映されます。

いづれも画面が閉じる際に画面間でデータの受け渡しを行っています。

C#で画面遷移(子画面など)でデータを渡す方法画面の遷移をした最のデータの渡し方を紹介します。 簡単にできそうで、意外と書き方を忘れてしまうので、備忘録のためにも残しておきます...

本当はエクセルから一括取込みをしようと考えていましたが、作れていません。

改修をしてエクセル取込みを実現してみても良いと思います。

C# エクセル取込みしてSQLでデータ更新C#などで開発する時にエクセルの一括取込み機能を作るときがあると思います。 いちいち調べて、プログラムを組んでと言うのが面倒なので...
C# エクセルをDatatble,Datagridviewに取込み(複数シート) C#でエクセルをdatatableに取込むことはたまにあると思います。 備忘録として残しておきます。 実際に作ったフ...

イベント情報一覧・編集画面

イベントを検索、更新、削除、登録する画面です。

検索は画面上部の条件を元に検索を行います。

クリアボタンを押すと、画面初期表示と検索条件が同じ状態にクリアされます。

検索結果はステータスによって行に色がつくようになっています。

データグリッドビューの上に判例がありますが、以下のように背景色が変わります。

一度でも送信されたことがあれば、黄色

終了イベントは灰色

削除されたイベントは

更新はデータグリッドビューに表示されているすべてのデータをDatatableに格納し、DBへ更新をしています。

本当は変更された行だけを更新するほうが効率が良いのですが、技術不足で実装できませんでした。

この辺りも改修していただいても良いと思います。

DataGridViewをDataTableに変換 C#こんにちは。 最近開発から外れていましたが、少し開発をしたので残しておこうと思いました。 内容はデータグリッドビューの中身を...

因みに、時間のFromとToはhh:mmのフォーマットでなければ、入力エラーになります。

削除は「削除列」のチェックがあれば、削除フラグを立てる更新をしています。

登録は画面下部のテキストボックスを元に登録します。

データグリッドビューの選択した行を表示するので、コピーして登録する際は便利です。

テキストボックスの時間FromとToはデータグリッドビューのように入力チェック処理を入れることができていません。

こちらも改修をしてみて下さい。

補足

logフォルダはあるが、ログは出ません。

必要あれば、ログを吐くように改修してください。

ENIA_UTILの概要説明(仕様)

共通処理や共通パラメータを格納しています。

具体的には、csvファイルの読込処理や本番環境のデータベースファイルの配置先などです。

詳細はC#のプログラムを読んでください。

本番環境へリリースする際の注意点

本番環境にリリースする場合、注意点がいくつかあるので記載しておきます。

ENIA_UTILのパス

プログラムをダウンロード時は、開発環境の設定です。

ENIA_UTIL.slnにあるConstLib.csのパスが開発(デバッグ)用になっています。

リリースする場合、以下をそれぞれ変更してください。

private const string addPathを変更

以下のようになっているので、コメントアウトを変更します。

本番用と開発用に分けてコメントアウトを変更してください。

private const string addPath = @"C:\LSTool\EvnetsNotificateInAdvance\";     //本番
//private const string addPath =
//    @"C:\LSTool\EvnetsNotificateInAdvance\ENIA";                          //デバッグ

public string UpdateSendHistoryを変更

こちらも同様です。

以下のようになっているので、コメントアウトを変更します。

本番用と開発用に分けてコメントアウトを変更してください。

public string UpdateSendHistory = addPath + @"\ENIA_BATCH\ENIA_BATCH_B1\b10_0102\b10_0102\bin\Release\b10_0102.exe";    //履歴更新 テスト環境
//public string UpdateSendHistory = addPath + @"\ENIA_BATCH\bin\b10_0102.exe";                           //履歴更新 本番環境

ビルドの順番と本番ファイルの配置先

UTILのパスを変更した後、以下の順番でビルドをしてください。

①ENIA_UTILをリビルド

②ENIA_ONLINE、ENIA_BATCHのソリューションをリビルドしてください。

③各モジュールを本番用のパスに配置(C:\LSTool\EvnetsNotificateInAdvance\ENIA)以下に配置

※ENIA_UTILを先にビルドしないと、ENIA_BATCHやENIA_ONLINEが参照するパスが本番用に変わりません。

 

配置するモジュールはそれぞれ以下の通りです。

ENIA_BATCH

配置先 C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bin

・b10_0101.exe
・b10_0102.exe
・ENIA_UTIL.dll
・NonMailNet.dll
・System.Data.SQLite.dll

ENIA_ONLINE

配置先 C:\LSTool\EvnetsNotificateInAdvance\ENIA_ONLINE\bin

・ENIA_ONLINE.exe
・ENIA_UTIL.dll
・System.Data.SQLite.dll

リリースモード

Debugでなく、Releaseでリビルド・ビルドを行って下さい。

想定通りに動かないことがあります。

例)DebugでビルドしたONLINEのexeを起動するとイベント情報一覧・編集画面の入力チェックが反応しないことがありました。

このメッセージがエラーでも出ないことがありました。

最後に

私は開発に関わった経験は2年ほどで、今は開発から離れています。

また、開発と言っても保守担当として規模の小さい開発しかしていません。

そんな中、独学でプログラムの勉強をして、ENIAを作りました。

モチベーションのアップダウン繰り返して2年ほどかかりましたが…

プログラミングの独学とはエラーとの闘い プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。 私も最初はエラーが出るたびにいちいちビビッて、意味...

2年ほどかかりましたが、私のように「システムやアプリ開発をしたソースコードのサンプルが欲しい」と言う思いをされている方のためになれば幸いです。

おすすめのプログラミングスクール めざせ就職・年収アップ! プログラミングを独学でされている人は意外と多いです。 ただ、プログラミングの独学は簡単にはいきません。 自分だけの力...

 

ABOUT ME
LooseCarrot
LooseCarrot
ブログ運営をしているLooseCarrotです。 興味のあることにトライして発信していきます! プロフィール

関連している記事