トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

メール受信部

メール受信部

メールの受信部の処理もほぼ送信部と同じ処理と考えてよいが、次の点が異なる。

  1. POPサーバの応答コードは+Kと-ERRだけしかないことに注意する。
  2. 受信したメッセージを表示する

メールの件数を取得したら、その番号を使ってメッセージをひとつずつ受信する。

 受信手順

次のとおり

  1. POPサーバと接続する
  2. 接続完了後、ユーザ認証を行う
    1. ユーザ名を送信する
    2. 応答受信後、パスワードを送信する
  3. ログイン確認後、メールのリストを取得する
  4. メールデータを一つずつ受信する
    1. 受信したメールデータを表示し、ファイルへ保存する
  5. すべてのメールデータを受信したらPOPサーバとの接続を切る

 POPサーバと接続する

受信ボタンクリック時の処理は送信部のメール送信ボタンと同様の処理をする。

  1. サーバ名の設定
  2. ポート番号の設定
  3. Winsockを使った接続

 応答受信時の処理

サーバからの応答に対する処理はどのコマンドを送信したかにより異なる。応答の回数や直前に送信したコマンドにより適切な処理を実施する。

ここでは、ユーザ名送信、パスワード送信、リスト取得、メールデータ受信、終了の順に処理することにする。つまり、サーバからの応答(+OK)が何個かによって処理を分岐させることにする。

応答回数 直後の処理
1 ユーザ名送信(USER xxxx)
2 パスワード送信(PASS xxxx)
3 メール件数の確認(LIST)
4〜4+メールの件数-1 メール本文の受信(REPT)
4+メール件数 受信終了(QUIT)

 サーバからのデータ受信時の処理

受信したデータはMainフォーム上のリストボックスmsgに追加される。

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
' 受信データ保存用変数
Dim strData As String

  ' 受信データを変数へ代入
  Winsock1.GetData strData, vbString
  ' メッセージ用リストボックスへ受信データの表示
  Main.msg.AddItem strData
  ' メールのリストを取得しているときなら、メール件数を取り出す
  If Listflg Then
    MailCnt = Val(Mid(strData, 5, InStr(5, strData, " ", 1) - 5))
    Listflg = False
  End If
 
  ' メールの内容を受信しているときの処理
  If Rcvflg And (Left(strData, 1) <> "+") Then
    ' メールデータをリストボックスとファイルへ追加する。
    Main.List1.AddItem strData
    Open "MAILDATA" For Append As #1
      Write #1, strData
    Close #1
  End If

  ' サーバからの応答数をカウントし、その数に応じた処理をする
  If Left(strData, 1) = "+" Then
    POPcnt = POPcnt + 1
    ' コマンド送出処理
    POPprocess
   End If
 End Sub