POP3サーバからメールを読み出します。
メールの受信はPOP3サーバを使うのが普通です。
POP3サーバに接続したら
+OK ...の返事が来ます。そうしたら
USER USER名のコマンドを送ります。
POP3サーバにこのUSER名が登録されていると +OK ...の返事が来ます。そうしたら
PASS パスワードのコマンドを送ります。
成功したら +OK ...の返事が来ます。
次に自分のしたいコマンドを送ります。
LIST nは、n番目のメールサイズが返されます。nを省略するとすべてのメールサイズが返されます。
RETR nは、n番目のメールを読みます。
QUITは通信を終了します。
DELE nは、n番目のメールをサーバーから削除します。
telnet接続を使うとメールサーバにこれらのコマンドを送信することができます。 今回は、telnetでメールサーバに接続するまでのプログラムを作ります。 接続後は、手動でコマンドを送信します。
telnetを使うにはどうしたらよいのでしょうか。
コマンドプロンプトから「telnet」とタイプするとtelnetが起動します。 しかし、これはサーバにたいして23番ポートを使います。しかしPOP3サーバは通常110番ポートを使います。
これは、次のようにすれば解決します。
telnet サーバー名 ポート番号結局この文字列をコマンドとしてsystem関数で実行すれば良いのですね。
では、プログラムを見てみましょう。
// getmail.c #include <stdio.h> #include <stdlib.h> int main() { char szServer[64], szBuf[8]; unsigned short port; printf("サーバー名---"); gets(szServer); printf("ポート番号(通常110)---"); gets(szBuf); port = (unsigned short)atoi(szBuf); sprintf(szBuf, "telnet %s %d", szServer, port); system(szBuf); return 0; }何とも簡単なプログラムです。 では、実際に動かしてメールを読み出してみます。
+OK POP3 BlackJumboDog(-RAS) starting <112.1061126686@bjd.ne.jp> USER **** +OK Password required for master PASS **** +OK master has 6 messages ( 4896 cotets ). LIST +OK 6 4896 1 500 2 792 3 1005 4 853 5 876 6 870 . RETR 6 +OK 6 870 Received: from xeon by bjd.ne.jp with SMTP id AD100E72; Sat, 2 Aug 2003 21:27:37 +0900 B:#F|$O$h$$E75$$G$9!#B BL@F|$b$h$$E75$$G$7$g$&$+B . QUIT +OK Goodbye. ホストとの接続が切断されました。この実行結果はtelnetで接続後のサーバーとのやりとりです。
(ユーザー名やパスワードは*****で伏せ字にしてあります。)
さて、メールの本文らしきところがなにやら文字化けしていますね。 これは、通常日本語はISO-2022-JP規格(JIS互換)で送られてくるからです。 日本のパソコンはシフトJISなので、このように文字化けするのです。
さて、このサーバーとのやりとりをプログラムにすれば、立派なメールソフトになります。
Update Feb/08/2004 By Y.Kumei