//*************************************************************** // SENDEMAIL.C // Invia una email alla pressione di un tasto // // TANZILLI.COM di Sergio Tanzilli // http://www.tanzilli.com/?id=1314 //*************************************************************** #include <18F452.h> #use Delay(Clock=10000000) #fuses HS,NOWDT,NOPROTECT,NOLVP #include #include // Operatore telefonico //#define WIND //#define TIM //#define VODAFONE #define OMNITEL #define MAIL_FROM "info@ee01.it" #define MAIL_TO "info@ee01.it" // Selezione dei parametri variabili in base all'operatore // telefonico a cui appartiene la SIM #ifdef WIND #define GPRS_APN "internet.wind.biz" #define GPRS_USERID "none" #define GPRS_PASSWD "none" #define GPRS_SMTP "smtp.libero.it" #endif // TIM e' l'unico operatore che richiede user e password per // accedere al GPRS. In GPRS_USERID indicare il numero di telefono della SIM // senza prefisso internazionale. Es. 33912345678. Nel campo GPRS_PASSWD inserire // la password assegnata da TIM #ifdef TIM #define GPRS_APN "uni.tim.it" #define GPRS_USERID "3391234567" #define GPRS_PASSWD "111111" #define GPRS_SMTP "mail.posta.tim.it" #endif #ifdef VODAFONE #define GPRS_APN "web.omnitel.it" #define GPRS_USERID "none" #define GPRS_PASSWD "none" #define GPRS_SMTP "smtp.net.vodafone.it" #endif #ifdef OMNITEL #define GPRS_APN "web.omnitel.it" #define GPRS_USERID "none" #define GPRS_PASSWD "none" #define GPRS_SMTP "smtp.net.vodafone.it" #endif // Linea a cui collegare il led di segnalazione. // Si accende quando il modulo EE01 è pronto per leggere lo // stato del pulsante KEY #define LED PIN_C0 // Linea su cui collegare il pulsante di invio #define KEY PIN_C2 void main(void) { int i; int cMail; char buffer[256]; char token[10]; cMail=0; // Abilita gli interrupt in ricezione sulla USART collegata al modem enable_interrupts(int_rda); enable_interrupts(global); // Mette i criteri del modem i stato di riposo gm_LineInit(); // Accende il modem gm_PowerOn(); // Aspetta che il modem si registri alla rete GSM // Se questo non avviene il programma rimane in questo loop // ed il led continua a lampegiare while (gm_NetworkChecking()==0) { output_high(LED); delay_ms(500); output_low(LED); delay_ms(500); } delay_ms(500); // Invia al modem i dati relativi all'accesso GPRS // In questo esempio viene utilizzato un accesso a wind // Per conoscere i parametri degli alti operatori: // http://www.tanzilli.com/?id=6 sprintf(token,"OK"); printf(gm_putc,"AT+CGDCONT=1,\"IP\",\"%s\",\"0.0.0.0\",0,0\r",GPRS_APN); gm_WaitToken(1000,token,buffer); delay_ms(500); printf(gm_putc,"AT#USERID=\"%s\"\r",GPRS_USERID); gm_WaitToken(1000,token,buffer); delay_ms(500); printf(gm_putc,"AT#PASSW=\"%s\"\r",GPRS_PASSWD); gm_WaitToken(1000,token,buffer); delay_ms(500); printf(gm_putc,"AT#SKTSET=0,25,\"%s\"\r",GPRS_SMTP); gm_WaitToken(1000,token,buffer); delay_ms(500); printf(gm_putc,"AT#SKTSAV\r"); gm_WaitToken(1000,token,buffer); delay_ms(500); // Con il comando SKTSAV si programma nella EEPROM del modem // la configurazione di accesso del proprio operatore telefonico // Questa configurazione rimane memorizzata nel modem anche in assenza // di alimentazione per cui per gli accessi successivi non è necessario // ritrasmetterla a meno di non cambiare la carta SIM con quella di // un altro operatore. // Accende il led fisso per indicare che e' pronto // per accettare la pressione del tasto KEY output_high(LED); for (;;) { // Se viene premuto il tasto KEY spegne il LED e trasmette l'email if (input(KEY)==0) { output_low(LED); // Si connette al server SMTP for (;;) { sprintf(token,"CONNECT"); printf(gm_putc,"AT#SKTOP\r"); if (gm_WaitToken(5000,token,buffer)==0) { for (i=0;i<=10;i++) { output_high(LED); delay_ms(100); output_low(LED); delay_ms(100); } } else { delay_ms(500); break; } } // Invia i comandi direttamente al server SMTP // http://www.faqs.org/rfcs/rfc821.html output_low(GM_RTS); sprintf(token,"250"); printf(gm_putc,"HELO %s\r\n",GPRS_SMTP); gm_WaitToken(4000,token,buffer); printf(gm_putc,"MAIL FROM:<%s>\r\n",MAIL_FROM); gm_WaitToken(2000,token,buffer); printf(gm_putc,"RCPT TO:<%s>\r\n",MAIL_TO); gm_WaitToken(2000,token,buffer); sprintf(token,"354"); printf(gm_putc,"DATA \r\n"); gm_WaitToken(2000,token,buffer); printf(gm_putc,"From: %s\r\n",MAIL_FROM); printf(gm_putc,"To: %s\r\n",MAIL_TO); printf(gm_putc,"Subject: Messaggio n.%d\r\n\r\n",++cMail); printf(gm_putc,"Tasto KEY premuto %d volte\r\n",cMail); printf(gm_putc,"--------------------------\r\n",cMail); printf(gm_putc," APN GPRS = %s\r\n",GPRS_APN); printf(gm_putc,"SMTP SERVER = %s\r\n",GPRS_SMTP); printf(gm_putc,"\r\n.\r\n"); sprintf(token,"250"); gm_WaitToken(4000,token,buffer); printf(gm_putc,"+++"); // Attende che venga rilasciato il punsante while (input(KEY)==0); output_high(GM_RTS); output_high(LED); } } }