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;
}