WORD GSM_SmtpSend(char * email, char * title, far char * body)

WORD GSM_SmtpSend(char * email, char * title, far char * body)
{
 static BYTE index_email = 0;
 if(ModemGsm.Signal.Control.RcvMessage){
  if(GSM_CompareMessage("+QSMTPDST: 0") && Gsm.ActualCommand == mcQSMTPDST){  
   index_email++;    
   while(index_email != NUM_DEVICES_GPRS_SMTP){
    if(strlen((const char *)TableAddressGPRS_SMTP[index_email].EmailRecipient) != 0){
     break;
    }
    index_email++;
   }
   if(index_email == NUM_DEVICES_GPRS_SMTP){
    Gsm.State = SMTP_TITLE_EMAIL;
    index_email = 0;
   }
   else{
    Gsm.State = SMTP_RECIPIENT;
   }
   ModemGsm.Signal.Control.CommandOK = TRUE;
   ModemGsm.Signal.Control.RcvMessage = FALSE;
  }
  else if(GSM_CompareMessage("CONNECT") && Gsm.ActualCommand == mcQSMTPBODY ){ 
   UART_PutData(MODEM, body, strlen((const char*)body));
   UART_PutData(GSM_DEBUG, body, strlen((const char*)body));
   Gsm.State = NONE;
   ModemGsm.Signal.Control.RcvMessage = FALSE;
  }
  else if(GSM_CompareMessage("+QSMTPBODY:")){ 
   ModemGsm.Signal.Control.CommandOK = TRUE;
   Gsm.State = SMTP_PUT_EMAIL;
   ModemGsm.Signal.Control.RcvMessage = FALSE;
  }
  else if(GSM_CompareMessage("+QSMTPPUT:") && Gsm.ActualCommand == mcQSMTPPUT ){ 
   ModemGsm.Signal.Control.CommandOK = TRUE;
   ModemGsm.Signal.Control.Process = FALSE;
   Gsm.State = NONE;
   ModemGsm.Signal.Control.RcvMessage = FALSE;
   return 0;
  }
  else if(GSM_CompareMessage(GSMResponse[mrOK])){  
   switch(Gsm.ActualCommand){
    case mcQSMTPDST:
     ModemGsm.Signal.Control.CommandOK = TRUE;
     Gsm.State = NONE;
     ModemGsm.Signal.Control.RcvMessage = FALSE;
     return 0;
    case mcQSMTPSUB:
     ModemGsm.Signal.Control.CommandOK = TRUE;
     Gsm.State = SMTP_BODY_EMAIL;
     ModemGsm.Signal.Control.RcvMessage = FALSE;
     break;
    case mcQSMTPBODY:
     ModemGsm.Signal.Control.CommandOK = TRUE;
     Gsm.State = NONE;
     ModemGsm.Signal.Control.RcvMessage = FALSE;
     break;
    case mcQSMTPPUT:
     ModemGsm.Signal.Control.CommandOK = TRUE;
     Gsm.State = NONE;
     ModemGsm.Signal.Control.RcvMessage = FALSE;
     break;
   }
  } 
 }  switch(Gsm.State){   case SMTP_RECIPIENT:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQSMTPDST]);    strcat((char*)Gsm.CommandData, "1,2,\"");    while(index_email != NUM_DEVICES_GPRS_SMTP){     if(strlen((const char *)TableAddressGPRS_SMTP[index_email].EmailRecipient) != 0){      break;     }     index_email++;    }    if(index_email == NUM_DEVICES_GPRS_SMTP){     ModemGsm.Signal.Control.CommandOK = TRUE;     ModemGsm.Signal.Control.Process = FALSE;     Gsm.State = NONE;     ModemGsm.Signal.Control.RcvMessage = FALSE;     index_email = 0;     API_CmdAnswer(&Packet, ERR_GSM_SmtpSend_NO_EMAIL);     return 0;    }    strcat((char*)Gsm.CommandData, TableAddressGPRS_SMTP[index_email].EmailRecipient);    strcat((char*)Gsm.CommandData, "\"\r");    Gsm.ActualCommand = mcQSMTPDST;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SMTP_TITLE_EMAIL:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQSMTPSUB]);    VERSION_GetPN(bTemp);    strcat((char*)Gsm.CommandData, "0,\"");    strcat((char*)Gsm.CommandData, bTemp);    strcat((char*)Gsm.CommandData, "\"\r");    Gsm.ActualCommand = mcQSMTPSUB;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SMTP_BODY_EMAIL:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQSMTPBODY]);    Gsm.ActualCommand = mcQSMTPBODY;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;   case SMTP_PUT_EMAIL:    strcpy((char*)Gsm.CommandData, GSMCommand[mcQSMTPPUT]);    Gsm.ActualCommand = mcQSMTPPUT;    ModemGsm.Signal.Control.SendCommand = TRUE;    Gsm.State = NONE;    break;  }  return 1; }