SIM900 Arduino UNO Send eMails

Hi together,

i got problems with the SIM900 and sending emails.

If i using the example code for AT commands and enter the AT commands into the serialmonitor separately, then it works fine and i send an email.

here is the working code:

#include "SIM900.h"
#include <SoftwareSerial.h>
//#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to communicate with SIM900 through AT commands.

//InetGSM inet;
//CallGSM call;
//SMSGSM sms;

int numdata;
char inSerial[40];
int i=0;


void setup()
{
     //Serial connection.
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");
     //Start configuration of shield with baudrate.
     //For http uses is raccomanded to use 4800 or slower.
     if (gsm.begin(9600))
          Serial.println("\nstatus=READY");
     else Serial.println("\nstatus=IDLE");
};

void loop()
{
     //Read for new byte on serial hardware,
     //and write them on NewSoftSerial.
     serialhwread();
     //Read for new byte on NewSoftSerial.
     serialswread();
};

void serialhwread()
{
     i=0;
     if (Serial.available() > 0) {
          while (Serial.available() > 0) {
               inSerial[i]=(Serial.read());
               delay(10);
               i++;
          }

          inSerial[i]='\0';
          if(!strcmp(inSerial,"/END")) {
               Serial.println("_");
               inSerial[0]=0x1a;
               inSerial[1]='\0';
               gsm.SimpleWriteln(inSerial);
          }
          //Send a saved AT command using serial port.
          if(!strcmp(inSerial,"TEST")) {
               Serial.println("SIGNAL QUALITY");
               gsm.SimpleWriteln("AT+CSQ");
          } else {
               Serial.println(inSerial);
               gsm.SimpleWriteln(inSerial);
          }
          inSerial[0]='\0';
     }
}

void serialswread()
{
     gsm.SimpleRead();
}

Then i enter the following AT commands:
AT+SAPBR=3,1,“Contype”,“GPRS”
AT+SAPBR=3,1,“APN”,“web.vodafone.de
AT+SAPBR =1,1
AT+SAPBR=2,1
AT+EMAILCID=1
AT+EMAILTO=30
AT+SMTPSRV=“mail.smtp2go.com”,2525
AT+SMTPAUTH=1,“user”,“pass”
AT+SMTPFROM="aaaa@bbbbb.de",“Test”
AT+SMTPRCPT=0,0,"xxxxx@yyyy.de",“R”
AT+SMTPSUB=“MySubject”
AT+SMTPBODY
(enter Ctr + Z)
AT+SMTPSEND

It works perfect. I get responds from the AT commands and finally the email.

How can i translate that into code now?

I connected the components as shown in the screenshot.
As connection to the shield i use softwareserial with PIN 7 and 8.

Could anyone help me to solve the problem?

Arduino GPRS Shield.pdf (838 KB)

Ok i found a Possibility to send the AT commands via the SIM900.h file.

But now i got the Problem to send the char(26) sign at the end of the email body. So the result is an email in my mailfile without an body.

Can anyone help?

#include <OneWire.h> 
#include "SIM900.h"         //SIM900
#include <SoftwareSerial.h> //SIM900

boolean started = false;


void setup(void) {
  Serial.begin(9600);
  GSM900PowerOn();                      // Power on GSM shield
}

void loop(void) {
  Serial.println("AT");
  gsm.SendATCmdWaitResp(F("AT"), 1000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\"");
  gsm.SendATCmdWaitResp(F("AT+SAPBR=3,1,\"Contype\",\"GPRS\""), 2000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SAPBR=3,1,\"APN\",\"web.vodafone.de\"");
  gsm.SendATCmdWaitResp(F("AT+SAPBR=3,1,\"APN\",\"web.vodafone.de\""), 2000, 50, "OK", 5);
  delay(1000); 
  Serial.println("AT+SAPBR =1,1");
  gsm.SendATCmdWaitResp(F("AT+SAPBR =1,1"), 3000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+EMAILCID=1");
  gsm.SendATCmdWaitResp(F("AT+EMAILCID=1"), 2000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+EMAILTO=30");
  gsm.SendATCmdWaitResp(F("AT+EMAILTO=30"), 2000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPSRV=\"mail.smtp2go.com\",2525");
  gsm.SendATCmdWaitResp(F("AT+SMTPSRV=\"mail.smtp2go.com\",2525"), 1000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPAUTH=1,\"USER\",\"PASS\""); 
  gsm.SendATCmdWaitResp(F("AT+SMTPAUTH=1,\"USER\",\"PASS\""), 1000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPFROM=\"MAILFROM\",\"NAME\""); 
  gsm.SendATCmdWaitResp(F("AT+SMTPFROM=\"MAILFROM\",\"NAME\""), 1000, 50, "OK", 5);
  delay(1000);  
  Serial.println("AT+SMTPRCPT=0,0,\"MAILTO\",\"NAME\""); 
  gsm.SendATCmdWaitResp(F("AT+SMTPRCPT=0,0,\"MAILTO\",\"NAME\""), 1000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPSUB=\"MySubject\""); 
  gsm.SendATCmdWaitResp(F("AT+SMTPSUB=\"MySubject\""), 1000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPBODY=\"Inhalt\""); 
  gsm.SendATCmdWaitResp(F("AT+SMTPBODY=\"Inhalt\""), 3000, 50, "OK", 5);
  delay(1000);
  Serial.println("AT+SMTPSEND"); 
  gsm.SendATCmdWaitResp(F("AT+SMTPSEND"), 7000, 50, "OK", 5);
  delay(20000);
  Serial.println("Mail versendet");
    delay(20000);
  }

  /*** Funktion zum Einschalten GSM Shield via Software ***/
void GSM900PowerOn()
{
    Serial.println("Starting GSM Modul...");
    //Einschalten des GSM Moduls mittels Software
    digitalWrite(GSM_ON, LOW);
    delay(1000);                         // 1s HIGH switch SIM900 ON or OFF
    digitalWrite(GSM_ON, HIGH);
    delay(2000);        
    digitalWrite(GSM_ON, LOW);
    delay(3000);                         // Wait 3s until chip is initialized
     //Starte Netwerksuche
        if (gsm.begin(9600)) {
            Serial.println("Status=READY");
            started=true;
        } else {
            Serial.println("Status=IDLE");        
        }
         delay(2000); 
}

Hello Cica

The code to send CTRL-Z is this :

// End AT command with a ^Z, ASCII code 26
SIM900.println((char)26);

In your case change the SIM900.println to you code setting i think is this but check it :

gsm.SendATCmdWaitResp(F((char)26), 7000, 50, "OK", 5);

i have a question for you or for anyone that knows the answer,

In your AT commands what did you use as "user" and "pass" ?
I already used login from my SMTP2GO acount , and login from the email that i want to send the email from (in this case is a GMAIL account ), but the shield keeps giving me error 67 (Authentication failed. SMTP User name or password may not be right)

So what am i missing ?

.........
AT+SMTPSRV="mail.smtp2go.com",2525
AT+SMTPAUTH=1,"user","pass"
.........

I hope you can help me .
Thanks in advance