メールチェックソフトを作ろう


1.どんなものを作るのか

メールを着信と同時に確認できたら便利だろうということを思いつき自分で作ってみようと試みました。メールが誰かから到着すると画面右下に着信メール数が表示されるというソフトを作成します。
次にこれから作るソフトの主な機能を紹介します。

 

1.メールを5秒おきにチェックし、新着メールがあったときはその件数を表示する。
2.メールが着信すると画面右下にアイコンと文字を表示し、それと同時に指定した音楽ファイルを鳴らす。
3.画面右下に表示された文字をクリックすることで指定のメールソフトが起動するようにする

2.使用プログラミング言語



使用言語はMicrosoftの「Visual Basic 6.0 Professional Edition」です。
他にLearning Edition、Enterprise Editionがあります。

ラーニングエディションはプログラムの練習用
プロフェッショナルエディションは一般向けソフト開発用
エンタープライズエディションは企業向けソフト開発用です。

どれもMicrosoftがBasic言語を主体として開発した独自のプログラミング言語です。

(図0VBのバージョン情報参照)



 

3.作成方法

 

3-0.VBを起動してみよう

 

まず、起動方法です。

 

標準ではスタート→プログラム→Microsoft VisualBasic6.0→Microsoft の中にあるMicrosoft VisualBasic6.0をクリックするとたちあがります。初期画面は図4を参照してください。
今回は「標準EXE」を使用するので標準EXEをダブルクリックします。すると図5のようなウィンドウが現れます。これをフォームといいます。これがアプリケーションの基本となる部分です。

 

3-1.表面的な部分を作る

 

まず表面的な部分を作っていきます。作り方は簡単です。ツールボックス(図1)から部品を選びフォーム(Form)に貼り付けていくだけです。

 

 

1.接続先のサーバー名を入力するためのTextbox()を貼り付けます。
2.ユーザー名を入力するためのTextboxを貼り付けます。
3.パスワードを入力するためのTextboxを貼り付けます。
4.メールが着信したときに鳴らす音楽(.wav)ファイルへのフルパスを入力するTextboxを貼り付け ます。
5.起動させるメールソフトへのフルパスを入力するTextboxを貼り付けます。
6.wavファイルの参照ダイアログを表示させるためのCommand Button()を貼り付けます。
7.メールソフトの参照ダイアログを表示させるためのCommand Buttonを貼り付けます。

 

次に表示部分を変更します。
まずText1というのをクリックし、右のプロパティボックス(図2参照)の中のTextという値を変更します。ここでは文字は表示しなくてもよいので"Text1"というのを消すだけで良いです。

 これをText1からText5まで同じようにします。

 

次にCommand Buttonです。これはプロパティボックスのCaptionnという値を変更することで文字を変更できます。初期値はCommand1とCommand2になっているのでこれをそれぞれ「参照」に変更します。

 

部品名

変更するプロパティ

変更後の文字

Text1

Text

空欄

Text2

Text

Text3

Text

Text3

Password Char

*

Text4

Text

Text5

Text

Command1

Caption

参照

Command2

Caption

参照

 

以上で基本的な表面部分の作成はおしまいです。ここまでの完成図は図3参照
※Text3のPassword Charは内容を*で覆ってみえなくします。こうすることでパスワードが見られる心配がなくなります。


 

0

 

 

1

2

3

 

 

4

5

 

3-2.仕組みを理解しよう

次にメールをサーバーから受信する仕組みを理解します。
主な仕組みは次のようになっています。

 

1.サーバーとポートを110に指定して接続します。(110はPOP3の番号)
2.接続が成功すると次にユーザー名を送信します。
3.ユーザー名の認証に成功するとパスワードを送信します。
4.パスワードの認証に成功するとサーバーから新着メールの数を受信します。
5そして受信したメール数を画面に表示します。

 

これをフローチャートで表すとフローチャート1(メール受信)のようになります。


 

フローチャート1(メール受信)

※何らかの処理が成功すると次の

処理に移動します。失敗した場合

サーバーとの接続を切断し、一定

時間待ってから再度サーバーに接続

しなおします。

 


 


3-3.基本となるコードを書いていく


 

基本となるメール受信のコードを書いていきます。が、その前にサーバーとの接続、やりとりを容易にすることができる部品、周期的に同じ処理を行うことを可能にする部品を貼り付けます。(表面的には見えません。)ツールボックス(図1)の何も書いてないところを右クリックし、コンポーネントをクリックします。そしてその中から「Micorosoft Winsock Control 6.0」 を選びます。

 

するとツールボックスにこのようなアイコンが追加されたと思います。それをフォームに貼り付けます。
これが前者のほうです

次にツールボックスの中からこれを選び貼り付けます。これが後者のほうです。
そしてタイマーのIntervalプロパティを変更します。
このプロパティは何ミリ秒周期でかかれたコードを実行するかを示します
1000ミリ秒=1秒

 

部品名

変更するプロパティ

変更後の文字

Timer

Interval

5000

 

 

以上で準備が整ったのでコードを記述していきます。

まずプログラムを立ち上げたときに実行されるコードを書きます。
フォームをダブルクリックしてください。

 

Private Sub Form_Load()

End Sub

フォームがロードされたとき(すなわちプログラムが起動したとき)

フォームがロードされたときの処理終わり

 



このようなコードが自動的に生成されました。ここにコードを記述するとプログラムが立ち上がったときに記述したコードを実行してくれます。Form_Loadというのがフォームが立ち上がったときという意味です。

 

 


プログラム起動と同時にサーバーとの接続を開始しますのでここにはサーバーとの接続を行うコードを書きこみます。

 

Private Sub Form_Load()

Winsock1.Connect "", 110


MailStep="connect"
End Sub



先ほど追加したWinsockコントロールを使用して
サーバーとポートを110で接続する。

ステップをコネクト(接続)にする

備考

""となっているところにサーバー名が入ります。
ユーザーが設定した情報を代入します。
設定した方法を取得する方法は後で述べます。

 



次に接続が成功するとユーザー名などを送信します。
成功か失敗かを判断するためサーバーから応答があったときに実行されるコードを書きます。

 



先ほど貼り付けたWinsockの部品をダブルクリックします。すると赤文字で書かれた上の方のようなコードが生成されますがこれはサーバーにエラーが起こったときにという意味なので変更します。画面右上のErrorとかかれている横の▼をクリックしDataArraivalをクリックします。(図4参照)
 クリックすると下のようなコードが生成されます。これが応答があったときに実行される部分となります


 

Private Sub Winsock1_Error(ByVal Number As Integer,〜〜 CancelDisplay As Boolean)

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

End Sub

ここに成功、失敗の判断、ユーザーの認証、パスワードの認証、メール数の取得のコードを書いていきます

 ここからが複雑になります

まずは成功か失敗かの判断になります。



成功のときは常に「+OK 〜〜〜」という値が返ってきます。(〜〜〜のところは作業によって異なります。)
失敗のときは常に「-ERR エラー内容」が返ってきます。次のコードを見てください。

 

 

 

 

 

 

 

 

6


 

 

 

 

 

すべてのコードの一番上にかく↓↓
Dim Mes As String

Dim Reply As String


Dim MailStep As String


Dim Mail_n As String
'ここまで↑↑


Mesという変数を文字として使います。(返ってきた値をそのまま代入)

Replyという変数を文字として使います。(返ってきた値が+OK か-ERRかを判断)

MailStepという変数を文字として使います。(ステップがどこまで終了したかの確認用)

メール数を格納するための変数を文字として使います

'先ほど追加されたところの中に書く
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData Mes

Reply = Left(Mes, 4)

End Sub





WinsockをつかってMesに返ってきた内容を代入します。

ReplyにMesの内容の左から4文字目までを代入します。例えばMesに"+OK<12253.1027927286@deneb.freemail.ne.jp>"という値が格納されていたらReplyの内容は上の左から4文字目までの"+OK "が代入されます

備考

変数とはプログラム上での何かを入れる容器です。
例えば、上のようにAs Stringと宣言すれば文字の器に、
As Integerと宣言すれば数字の器になります。



これで成功(+OK)、失敗(-ERR)の情報の取得のコードが記述できました。
つぎはPOP3の仕組みを理解し、ステップを追って成功ならユーザー名送信、失敗なら接続終了というような条件分岐処理を書いていきます。


まずPOP3からメールを受信する仕組みを詳しく見ていきます。



まずサーバーと接続します。
接続するには"Connect"コマンドを使います。Winsockを利用してこのコマンドを送信します。
サーバーとの接続が成功するとサーバーから"+OK xxxxx.xxxxxxxxxx@サーバー名"というメッセージが返ってきます。
xxxxx.xxxxxxxxxxには接続時のIPが表示されます。

次にユーザー名を認証させます。"USER ユーザー名"という文字列を送信します。認証に成功すると+OK
失敗するか何らかのエラーが発生した場合は-ERRというメッセージが返ってきます。

次にパスワードの認証です。"PASS パスワード"という文字列を送信します。認証に成功すると+OK
失敗するか何らかのエラーが発生した場合は-ERRというメッセージが返ってきます。

次にメール数の受信です。"STAT"というコマンドを使用します。成功すると+OK メール数 総バイト数  のようなメッセージが返ってきます。(例:"+OK 1 1387")

 

実際にメールを受信する過程は以上のみです。
ではこれをコードに起こしていきます。


 


接続のコードはすでに記述済みなので接続の成功か、失敗かの取得→→パスワードの送信まで書きます。

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Winsock1.GetData Mes
Reply = Left(Mes, 4)

If MailStep = "connect" And Reply = "+OK " Then

MailStep = "user"

ElseIf Reply = "-ERR" Then

Winsock1.Close
MailStep = "connect"

End If

If MailStep = "user" And Reply = "+OK " Then

Winsock1.SendData "USER " & Text2.Text & vbCrLf


Exit Sub

MailStep = "pass"

ElseIf Reply = "-ERR" Then

Winsock1.Close
MailStep = "connect"

End If

If MailStep = "pass" And Reply = "+OK " Then


Winsock1.SendData "PASS " & Text3.Text & vbCrLf
MailStep = "stat"


Exit Sub

ElseIf Reply = "-ERR" Then

Winsock1.Close
MailStep = "connect"

End If

End Sub




上で説明済み
上で説明済み

もしステップがコネクトで接続が成功ならば

ステップをユーザーにする

そうではなく接続が失敗ならば

接続を閉じる
ステップをコネクト(接続)に戻す

もしの構文終わり

もしステップがユーザーで、接続が成功なら

Winsockを使ってText2の内容をユーザー名として送信する


抜ける

ステップをパスワードにする

そうではなく接続が失敗ならば

接続を閉じる
ステップをコネクトに戻す

もし構文終わり

もしステップがパスワードでユーザー名認証が成功だったら

Winsockを使ってText3の内容を送信する
ステップをメール受信にする


抜ける

そうではなく失敗だったら



接続を閉じる
ステップをコネクトに戻す

もし構文終わり



これで認証が終了したので好きにメール数の受信などが行えます。
ではメール数の受信です。が、メール数はPOP3の仕組みの説明のところで述べたように
+OK 12 14830 のような形で送られてくるためにこの中から適切な数字(この場合だと"12")を取り出さなくてはいけません。ではこんどはメール数の受信、適切な数値の取り出し方法について書きます。まずメールの受信です。

If MailStep = "stat" And Reply = "+OK " Then

Winsock1.SendData "STAT" & vbCrLf
MailStep = "allOK"
Exit Sub

ElseIf Reply = "-ERR" Then

Winsock1.Close
MailStep = "connect"

End If

もしステップがメール受信で認証が成功だったら

メールを受信する命令を送信する
ステップをすべて終了済みにする
抜ける

そうではなく失敗だったら

接続を終了する
ステップをコネクトに戻す

もし構文終わり



このようなコードを追加することによってメールの受信ができます。もちろん受信した内容は"Mes"という変数に入っています。

 次に内容から適切な数値をとる方法です。

If MailStep = "allOK" Then

Dim i As Integer

For i = 0 To 15

Mail_n= Mid(Mes, 5, i)


If Right(Mail_n, 1) = " " Then
Mail_n = Left(Mail_n, i - 1)

Exit For

Next

End If

もしステップがすべて終了済みだったら

ループのための変数を宣言する

宣言したiという変数が0から15になるまでループする

変数Mail_nに変数Mesの内容の左から5文字目からi文字目までを代入する

もしMail_nの右から1文字目が" "だったら
Mail_nの一番右の一文字をのぞく

ループ終了

次のループ

もし構文終わり



これで最初に宣言した変数Mail_nにメール数が格納されます。
これですべての情報の取得が終わりました。
つぎからはこれを表面的に表示していくコードを書いていきます。

3-4.設定の保存と読み込み

メールチェックの基本となる部分のコードが書けたので次はユーザーが打ち込んだ"サーバー名"、"ユーザー名"、"パスワード"、"メーラー"、"音ファイル"の内容を保存する方法です。
これはVBであらかじめ用意されている命令SaveSettingを使います。
設定を保存したいのはプログラムが終了されたときなのでフォームをダブルクリックして右上の▼をクリックしUnloadをクリックします。これがプログラムが終了されるときに実行されるコードとなります。(図7参照)


Private Sub Form_Unload(Cancel As Integer)

SaveSetting "mailchecker", "setting", "server", Text1.Text


SaveSetting "mailchecker", "setting", "user", Text2.Text


SaveSetting "mailchecker", "setting", "pass", Text3.Text


SaveSetting "mailchecker", "setting", "mailer", Text4.Text


SaveSetting "mailchecker", "setting", "wav", Text5.Text


End Sub




メールチェッカー→設定→サーバー名の中にText1の内容を保存する

メールチェッカー→設定→ユーザー名の中にText2の内容を保存する

メールチェッカー→設定→パスワードの中にText3の内容を保存する

メールチェッカー→設定→メーラーの中にText4の内容を保存する

メールチェッカー→設定→音楽ファイルの中にText5の内容を保存する




具体的なコードは上のようになります。これで各設定を保存することができました。次はこの保存した内容の読み込みです。これもVBで標準に用意されている命令Getsettingを使います。設定を読み込みたいのはプログラムを立ち上げたときなのでフォームをダブルクリックして以前に使ったForm_Loadのところにコードを書き込みます。具体的な内容は以下のとおりです。これをForm_Loadの部分の一番上に追加します

Text1.Text = GetSetting("mailchecker", "setting", "server")


Text2.Text = GetSetting("mailchecker", "setting", "user")


Text3.Text = GetSetting("mailchecker", "setting", "pass")


Text4.Text = GetSetting("mailchecker", "setting", "mailer")


Text5.Text = GetSetting("mailchecker", "setting", "wav")

Text1の内容をメールチェッカー→設定→サーバー名に保存された内容にする


Text2の内容をメールチェッカー→設定→ユーザー名に保存された内容にする

Text3の内容をメールチェッカー→設定→パスワードに保存された内容にする

Text4の内容をメールチェッカー→設定→メーラーに保存された内容にする


Text5の内容をメールチェッカー→設定→音楽ファイルに保存された内容にする



これで設定の読み込み→反映が終了しました。そこでWinsock1.Connect "", 110となっている部分を少し改造します。なぜかというとText1に入った内容のサーバーに接続したいからです。改造したコードは次のようになります。

Winsock1.Connect Text1.Text, 110

Winsockを使ってText1に入った内容のサーバーに接続する



これでWinsockはText1に入った内容のサーバーと接続してくれます。しかしこのままだとText1が空欄だったときにエラーが起きてしまいます(図8)。のでエラーとラップの命令On Error Resume NextというコードをForm_Loadの中の一番上に追加します。これでエラーが起きても回避して進んでくれるようになりました。

7

8

3-5実装された機能、追加しなければいけない機能

実装された機能についておさらいをしておきます。
以下がそれをまとめた表です。

ここまでで実装された機能

1.サーバー名、ユーザー名、パスワード、メーラー、音楽ファイル名を入力してプログラムを終了すると次回起   動時に設定が読み込まれる

2.プログラム起動時に入力されたサーバーに接続し、メール数を受信して変数に代入する

これから追加する機能

1.メールがくると画面右下にメール数などを表示する

2.メールがくると同時に指定した音ファイルをならす

3.右下に表示された文字をクリックすると指定したメールアプリケーションが立ち上がる

4.メーラー、音楽ファイルを「開く」ダイアログ(図9参照)で指定可能にする

5.一定周期で自動でメールをチェックできるようにする

9

10

3-6.実装しなければいけない機能1.を実装する

まず、メールがくると画面右下にメール数などを表示できるようにします。そのためにはフォーム(図10参照)を追加しなければいけません。プロジェクト→フォームの追加をクリックしてください(図11参照)
すると図12のような画面が出てきます。ここでフォームモジュールを選択してください。すると新しいフォームが表示されます。これにメール数を表示します。プロパティ(図2)のBorderStyleを0 - なしに変更し、右下の■にあわせてフォームのサイズを縮めます。

11

12



次に右下に出てくる画像を準備します。ここではWindowsに標準でついてくる「ペイント」を使います。ペイントはスタート→プログラム→アクセサリの中に入っています。それではペイントを起動してください。ペイント初期画面は図13です。そして変形→キャンバスの色とサイズをクリックし幅224、高さ32に設定します(図14)これで準備が整ったので自分の好きな絵を描いて下さい。例:図15

13

14



図15

 

 



画像の準備が整ったら用意した画像をフォームに貼り付けます。先ほど追加したフォーム(Form2)のPictureプロパティの横の「...」ボタンを押します。するとピクチャの読み込みというダイアログが出てくるので自分が書いた絵を
選択します。するとフォームに絵が張り付きます。これで絵の読み込みは完成です。絵の右の紫の部分にメールの数を表示したいのでツールボックスからAとかかれた「Label」というのを選択し、紫の部分(または余白の部分)に貼り付けます。そして貼り付けた「Label」、「Form2」のプロパティを以下のように設定します。

部品名

変更するプロパティ

変更後の値

Label

BackStlye

0−透明

ForeColor(文字色)

適当な色(ここでは白を選択します)

Form2

Top

7590

Left

8460



BackStlyeを透明にすることで背景が透けて見えるようになります。このプロパティを利用することで洗練されたデザインを作成することが可能になります。また、Formのトップ、レフトの値を変えることで表示位置を変更することができます。ここではデザインのみでOKなのでこれでForm2の作成はとりあえず完成です。

再びはじめのフォームに戻るためProject1→フォーム→Form1をダブルクリックしてください。(図16参照)

そしてメールがきたらForm2を表示するというコードを付け加えます。
メール数の取得の部分はDataArriveの部分にあるのでその中にコードを追加します。
以下のコードを参照してください。赤文字の部分が追加されたコードです。

If MailStep = "allOK" Then

Dim i As Integer

For i = 0 To 15

Mail_n= Mid(Mes, 5, i)


If Right(Mail_n, 1) = " " Then
Mail_n = Left(Mail_n, i - 1)

Exit For

Next

If Not Mail_n = 0 Then

Form2.Show

Form2.Label1.Caption="メールが" & Mail_n & "通届いています"

Else

Form2.Hide

End If


End If

















もし届いたメールが0通ではなかったら

フォーム二個目を表示させる

フォーム2のラベルの文字を「メールが」+Mail_nの内容+「通届いています」に変更する

そうでなかったら

Form2を隠す

もし構文終わり



これで一つ目の実装しなければいけない課題はクリアしました。

16

3-7.実装しなければいけない機能2を実装する

次は2.メールがくると同時に音楽を鳴らすです。しかしこれはVBにもともとついている機能では実装できません。なぜならばVBには音楽を鳴らす命令が用意されていないからです。そこでその命令を使用可能にするためAPIというものをつかいます。APIの正式名称は、「Application Program Interface」 (アプリケーション プログラム インターフェイス)です。これはWindowsそのものに用意されている命令を使い、なにかを動作させることです。この命令をを呼び出しプログラムすることまた、命令そのものををAPIと読んでいます。ではまずAPIを使うという宣言をしなければいけません。

音楽ファイルを鳴らすためのAPIは以下のとおりです。

'すべてのコードの一番上に記述

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long



これをすべてのコードの一番上に追加します。そうすることで宣言とみなされます。
これで音楽ファイルを鳴らすための命令の準備が整いましたので適切なところにコードを記述していきます。
下の表を見てください。灰色が上で追加したコードです。赤色が今回追加したコードです。

If Not Mail_n = 0 Then

Form2.Show

Form2.Label1.Caption="メールが" & Mail_n & "通届いています"

If Form2.Visible = False Then


sndPlaySound Text5.Text, SND_ASYNC Or SND_NODEFAULT

End If


End If







もし2個目のフォームが表示されていなかったら

Text5の内容を普通の方法で再生する

もし構文終わり

※なぜフォームが表示されていないときのみ音を鳴らすのか?

すでにフォームが表示されているのに音が鳴ると連続でなってしまうことになりユーザーにとっては
迷惑になってしまいます。これを防ぐためです。


これで2個目も実装されました。

3-8.実装しなければいけない機能3を実装する

次の機能は文字をクリックすることでメーラーを起動するです。これはすなわち「ラベルをクリックしたとき」なので
Form2のラベルをダブルクリックします。すると下のようなコードが追加されます。

Private Sub Label1_Click()

End Sub

ラベルをクリックしたとき

ラベルをクリックしたときの処理終わり



このなかにText4にかかれた内容のプログラムを立ち上げるという処理を追加します。外部のプログラムを立ち上げるための命令はShellというものです。

Private Sub Label1_Click()

Shell Text4.Text, vbNormalFocus

End Sub

Text4の内容のEXE(実行可能アプリケーション)を普通の状態で立ち上げる



ところでText4.Textの後の
,を打ったとき図17のようなボックスが出てきたと思います。これが次に続く入力候補です。それぞれの働きの違いについて少し触れてみます。

vbHide

この方法で立ち上げたプログラムは完全に隠れます。タスクバーにも表示されません。
強制終了(Ctl+Alt+Del同時押し)の画面で確認できます。

vbMaximizedFocus

この方法で立ち上げたプログラムは最大化の状態で表示されます。

vbMinmizedFocus

この方法で立ち上げたプログラムは最小化の状態で表示されます。下とは違いフォーカスは自身にあります

vbMinmizedNoFocus

基本的には上の起動方法と変わりませんがこれはフォーカスが自身にありません。

vbNormalFocus

「元のサイズ」で立ち上げます。フォーカスは自身にあります

vbNormalNoFocus

「元のサイズ」でたちあげますがフォーカスはありません

vbNormalFocusとvbNormalNoFocusの外面的な違いは図18を参照してください。

17

18(左がvbNormalFocus,右がvbNormalNoFocus)

これで3個目の機能も実装されました。

3-9.実装しなければいけない機能4を実装する

次の機能はボタンをクリックすることで開くダイアログを表示するものです。これには再び新たな部品の追加をしなければなりません。3-3の一番初めで述べた方法でコンポーネントダイアログを表示させ、そこからMicroSoft Common Dialog Contorl 6.0 を選択します。(図19)するとこのようなマークがツールボックスに追加されます。これがコモンダイアログコントロールと呼ばれる部品です。これにより図20のようないろいろな種類のダイアログが表示可能になります。具体的なコード方法は下のとおりです。

Private Sub Command2_Click()
On Error GoTo er

CommonDialog1.CancelError = True
CommonDialog1.Filter = "*.exe|*.exe"
CommonDialog1.ShowOpen
Text5.Text = CommonDialog1.FileName
Exit Sub
er:

End Sub

コマンドをクリックした時に
もしエラーが発生したらer:にいく

キャンセル時にエラーを発生させる
ファイルの種類をexeにする
開くダイアログを表示する
Text5の内容をダイアログで選択した内容にする
処理を抜ける
エラーが起こったときに通る部分

Private Sub Command1_Click()
On Error GoTo er

CommonDialog1.CancelError = True
CommonDialog1.Filter = "*.wav|*.wav"
CommonDialog1.ShowOpen
Text4.Caption = CommonDialog1.FileName
Exit Sub
er:
End Sub

コマンドをクリックした時に
もしエラーが発生したらer:にいく

キャンセル時にエラーを発生させる
ファイルの種類をexeにする
開くダイアログを表示する
Text5の内容をダイアログで選択した内容にする
処理を抜ける
エラーが起こったときに通る部分



これで機能4は実装できました。次はいよいよ最終機能一定周期で自動でメールをチェックできるようにするです。

19

20(いろいろな種類のダイアログ)



3-10.実装しなければいけない機能5を実装する

「一定周期で自動でメールをチェックできるようにする」というので思いつくのが一番最初に貼り付けたTimerです。この部品はこのときのために貼り付けたものです。TimerのIntervalプロパティの値が5000担っているのを確認してダブルクリックしてください。そして次のコードを追加します。

Private Sub Timer1_Timer()

Winsock1.Connect Text1.Text, 110

End Sub

インターバルで設定した値/1000秒周期で実行する処理

テキストの内容のサーバーとポートを110に指定して接続する

タイマー終了

3-11.手直し

以上ですべての機能が追加されました。これで完成となりました。がすこし手直しが必要です。それは設定画面が常に表示されたままなので起動時には隠しておくということです。それはForm_Loadの部分にForm1.Hideと記述するだけです。それと同時に設定画面を表示する手段を用意しなければいけません。それはここではメール通知の画像をクリックすると表示するようにしましょう。それはForm_Clickを使いForm1.Showを使います。これで手直しは終了です。

あとは自分なりに好きなデザインを付け加えるだけです。

各フォーム(Form1、Form2)の完成画面は図21〜23を参照

21(Form1の完成図)

22(フォーム2の完成図)

23(動作画面)

 

4.詳しく理解する

 

4-0.理解を深める(POP3)

 

プログラムの作成が終わったところで各機能について詳しく理解していくことにします。
まず、このプログラムの中心部分で扱ったPOP3について説明します。
今回はUSER、PASS、STATの三種類のみ取り扱いましたがその他のコマンドは下の表に列挙されてます。

 





コマンド

意味

USER ユーザー名

認証するユーザー名を指定する

PASS パスワード

認証するユーザーのパスワードを指定する

APOP ユーザー名 ダイジェスト

USER、PASSコマンドの認証の代わりに使用する。グリーティング・メッセージのチャレンジとパスワードから導いたダイジェストで、ユーザー認証を行う

STAT

メールメッセージの数とサイズを応答する

LIST [メッセージ番号]

メールメッセージ番号とそれぞれのサイズを応答する。メッセージ番号が指定された場合には、該当メッセージ分のみが対象

RETR メッセージ番号

指定されたメッセージ番号のメッセージ全体を表示する

DELE メッセージ番号

指定されたメッセージ番号のメッセージを削除する

NOOP

何もしない

RSET

認証確立後発生した削除処理を全て取り消す

TOP メッセージ番号 Line数

指定されたメッセージ番号のメッセージの指定されたLine分だけボディを表示する。Line数が0の場合は、ヘッダーのみの表示となる

UIDL [メッセージ番号]

UIDLの一覧を表示する。メッセージ番号が指定された場合は、該当メッセージ分のみ

QUIT

ログアウトする

LAST

最後にアクセスしたメッセージ番号を表示する

XTND 拡張命令 [引数]

RFC1082で定義されている。引数として他の拡張命令を伴うことで、その拡張命令を実行する。拡張命令としては、bboards、x-bboards、archive(電子掲示板やネットニュースの一覧表示や購読)がある

CAPA

オプションや拡張機能のコマンドなどの「能力」一覧の表示

AUTH

CRAM-MD5、LOGIN形式など、IMAP4などとも共通する認証を行う

 







次の図24はメール送信から送信先の相手が受信するまでの仕組みを図示したものです。

 

24

 



 

送信したメールは一度自分が契約しているサーバーに送られます。そこから相手が契約しているサーバーに送られます。そして相手がそのサーバーからメールを受信します。

また、メールは自分が書いた内容のみで送られるのではなく送信者、送信日時などの情報も含めて送信されます。次はRETR命令で受信したメールの内容です。(一部隠してあります)


 

 

 

+OK

Return-Path: <******************>

Delivered-To: *******************

Received: (qmail 21985 invoked from network); 6
Aug 2002 00:15:08 +0900

Received: from unknown (HELO ****)
(218.228.158.36)

by deneb.freemail.ne.jp with SMTP; 6 Aug 2002
00:15:08 +0900

Message-ID: <******************>

From: "*****" <**************>

To: <***************>


Subject: Test

Date: Tue, 6 Aug 2002 00:13:20 +0900

MIME-Version: 1.0

Content-Type: text/plain;

charset="iso-2022-jp"

Content-Transfer-Encoding: 7bit

X-Priority: 3

X-MSMail-Priority: Normal

X-Mailer: Microsoft Outlook Express
6.00.2600.0000

X-MimeOLE: Produced By Microsoft MimeOLE
V6.00.2600.0000


Test Message


.


成功

返り値

送信先

送信日時他…


送信時のアドレス


使用したサーバー名、日時


メッセージのID

送信者

送信先


件名

送信された日時

MIMEのバージョン

メールの種類(ここではテキスト形式)

文字列の認識方法

文字列形式の変換方法

優先順位

メーラーの優先順位

メーラー


メーラーが指定した文字列




内容


終了を表すピリオド

 

4-1.理解を深める(API)

 

APIの主な内容ついては3-7で説明したとおりですが、ここでは他のAPI関数(命令)について触れてみます。

 

画像転送用のAPI

BitBlt

VBに標準でついているPaintPicture命令に似ています。しかし処理能力がこちらのほうが格段に上です。

他のプログラムにメッセージを送る

PostMessage

外部のアプリケーションにこの命令を使い、何らかの処理を行わすことができます。

ウィンドウを別の形に変える

SetWindowRGN

たとえばウィンドウの形を星型などに変形することも可能です。

処理を一時中断する

Sleep

「待ち」を設けたいときに便利なAPIです。

 



次にAPIの宣言方法です。表にまとめてみました。

 

API名

宣言するAPIの名称を記述します

DLL名

宣言するAPIを提供しているDLLのファイル名を記述します。
システムフォルダ(または、呼び出す実行ファイルと同じフォルダ)に無い DLLの場合はフルパスで指定する必要があります。
(通常、DLLはシステムフォルダか実行ファイルと同じフォルダに置きます。)

エイリアス名

DLL内でのAPIの名称を記述します。
(DLL内で宣言されているAPIの名称をエイリアス名といいます。)

渡し値

APIに渡す値(変数)を宣言します。
もちろん、渡し値の数は1つとは限りません。

戻り値データ型

API実行後の戻り値のデータ型を記述します。

 



ここでDLLというものが出てきましたがDLLというのはAPIで使う命令のセット集です。
DLLの種類によって入っている命令の種類が違います。VBではAPIをスムーズに使用可能にするためAPIビューアというものが用意されています。それが図25です。これを使用することによって自分が利用したいAPIをすばやく検索できます。

 

25

 

 



ここまでが今回触れるAPIの説明です。

5.まとめ



今回、メールチェッカーを作成するにあたり自分の中でもコード、手順の整理、再確認ができ、ためになったと思います。今回の活動を生かし、さらにプログラミングスキルを向上させるとともにすばらしいプログラムの開発に励んでいきたいと思います。今回参考にさせていただいた文献およびサイトを下に上げておきます。また、この内容はHttp://heppokokun.cool.ne.jp/で自由に観覧することが可能です。

参考文献およびサイト

Visual Basicで学ぶWindowsプログラミング

VisualBasic6.0実践教室

でべろっぱのすすめとじあぴ(THE API)

MSDN Library