メールの取り込みはPOP(バージョン3)を用いて行う。手順としては、サーバに対して接続を行った後、ユーザ名&パスワードを送りログイン、コマンドを用いてメールのチェックと取り込み・削除を行う。通常使用するPOPコマンドは下記の通りである。(各コマンドの末尾に<CR><LF>を付けることを忘れないように)
USER xxxx | ユーザ名「xxxx」の通知 |
PASS yyyy | パスワード「yyyy」の通知 |
STAT | 到着しているメール数と容量の確認 |
RETR n | n番目のメールの取り込み |
DELE n | n番目のメールの削除 |
QUIT | 終了 |
サーバへの接続は、ドメインネームもしくはIPアドレスと、ポート番号を指定して行う。POP3のポート番号は通常110である。ドメインネームやIPアドレスについては、VBでWinsockコントロールを使用している限りでは、どちらを使用しようと問題はないが、システムによって異なる可能性はある。
サーバへの接続の後と、これらのコマンドを送付した後は、サーバ側から戻り値やステータスを含んだ文字列が返される。これは、エラーが無ければ「+OK」で、エラーがあれば「-ERR」で始まる文字列で、メールリーダ側はこの受信をした後で次の処理に移る。返答の受信にあたっては、ネットワークでの遅延に対しての対策が必要であるとともに、予期せぬネットワーク切断に対処すべく、プログラム上ではタイムアウト処理を考えねばならない。
上記のコマンドのうち、注意すべきこととしては、処理終了後は必ず「QUIT」とすることがあげられる。サーバ側は、ネットワークのエラー(回線の切断)に備え、一定時間後にタイムアウトするのが普通であるが、その間のアクセスが不能になるなどの問題が生じる。また、「QUIT」した時点で初めて「DELE」で指定した削除が実行される。同様に、新着のメールについても、接続状態では反映されない。現実には、タイマを用いるなどして、定期的にサーバへの接続とメールの取り込みを行い、その都度(メールがあろうと無かろうと)「QUIT」する処理となる。たとえば、メールを取り込んだ後に処理を加える場合など、その処理段階でエラーが生じることを考慮するならば、一旦「QUIT」しておき、全ての処理が終了した時点で、改めて接続して「DELE」コマンドを送るような工夫が必要であろう。
実際の処理ステップは概略下記の通りとなる。各項1行目のイタリックの部分が、コマンドである。2行目以降は、コマンド送出後の処理となる。
同じようなコマンド羅列が繰り返しになっているが、これは、「受信」のステップと受信済みメールに関する「削除」のステップを別けているからである。別けている理由は主にエラー時の対策をとるためであり、念を入れているということだ。一度の接続で受信と削除を連続して行ってしまっても構わない。なお、繋ぎっぱなしで放置した場合、サーバ側で時間切れとなり自動切断されることもあるし、回線エラーに遭遇する危険性もある。この辺は、使用環境を考慮する。
メールのチェック頻度や、同時取り込み数は、メールの使用状況に応じて考えておく。さほど頻度が高くないのであれば、メールを1本ずつ取り込み、削除していくようにすると、プログラミング上での負担はわずかながら軽減されるであろう。その場合は、上記で採っているメール確認ステップ(STATコマンド)を省略し、取り込みコマンド「RETR」に対するエラー確認にしてしまう手もある。
もし、受信メールのサイズを規定しておきたいのであれば、上記の「RETR n」コマンドに代えて、「TOP n 100」というコマンドを用いると良い。この例の100は、ヘッダを除いて100行目までを受信するという指定になる。また、受信するメールサイズが非常に大きい場合は、プログラミング上での工夫が必要になる。
Protocol | Name | RFC |
---|---|---|
POP3 | Post Officce Protocol, Version 3 | 1939 |