第93章 POP3サーバにtelnet接続する


さて、今回は少し変わったことをします。



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なので、このように文字化けするのです。

さて、このサーバーとのやりとりをプログラムにすれば、立派なメールソフトになります。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Feb/08/2004 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。