PHS経由でネットに接続できるEthernetアダプタのファームウェアをハック・中編 ―― LANにつないでメールの送受信と自動実行を実現
// Mail send sample (with SMTP auth) | |
char *Pop="popserver"; | // POPサーバ名 |
char *Smtp="smtpserver"; | // SMTPサーバ名 |
char PopState,SmtpState,*recbuf,*MailTo; | // POP&SMTPステート変数と各種バッファ |
main(){char soc,stat; | // main開始,ソケットとステータス用変数を確保 |
for(;;){ | // POPを監視し続けるためのループ開始 |
Sleep(6000);MemoryFree(MailTo);MailTo=0; | // 1分待って送信メール・アドレスをクリア |
soc=CreateSocket(1);GetDefMtu(soc, 512); | // ソケット生成,データ長を512バイトにセット |
if(soc<0){PrStr("Soc?");return;} | // ソケット生成エラー・チェック |
if(Connect(soc,GetHostByName(Pop),110)<0){PrStr("Pop?");return;} | // POPサーバに接続 |
PrStr("Connect POP server¥r¥n"); | // デバッグ用画面表示 |
PopState=1;GetNetLine(0,0,0,0); | // POPステート初期化およびTCP/IP入力ライブラリ初期化 |
recbuf=MemoryAlloc(64); | // 読み込みバッファ確保 |
for(;;){ | // POPステート・マシン・ループ |
stat=POP::PopHandler(soc); | // POPステート・マシン呼び出し |
if(stat<0||stat==1)break;SystemSleep(); | // POP終了チェック |
} | // POPステート・マシン・ループの終端 |
GetNetLine(0,0,0,1);MemoryFree(recbuf);CloseSocket(soc); | // 各種バッファの開放 |
if(!MailTo)continue; | // もしメールが来ていなければ,1分待って再度POPアクセスへ |
PrStr(MailTo);PrStr(" SMTP start¥r¥n"); | // デバッグ用に返信アドレスを表示 |
soc=CreateSocket(1);GetDefMtu(soc, 512); | // ソケット生成とTCP/IPデータ長をセット |
if(Connect(soc,GetHostByName(Smtp),25)<0){PrStr("Svr?");return;} | // SMTPサーバに接続 |
PrStr("Connect SMTP server¥r¥n"); | // デバッグ用画面表示 |
SmtpState=1; | // SMTPステート初期化 |
for(;;){ | // SMTPステート・マシン・ループ |
stat=SMTPAUTH::SmtpHandler(soc); | // SMTPライブラリ呼び出し |
if(stat<0||stat==1)break;SystemSleep(); | // SMTPステート終了チェック |
} | // SMTPステート・マシン・ループの終端 |
CloseSocket(soc): | // SMTP用のソケット開放 |
} | // POPを監視し続けるループの終端 |
} | // mainの終端 |
リスト3 メール自動返信のMainファイル