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ファイル


