Problem with ESP8266

i recently bought a new ESP8266. The AT commands work fine, but after uploading this code:

#include <Adafruit_ESP8266.h>
#include <SoftwareSerial.h>

#define ESP_RX   3
#define ESP_TX   4
#define ESP_RST  8
SoftwareSerial softser(ESP_RX, ESP_TX);

// Must declare output stream before Adafruit_ESP8266 constructor; can be
// a SoftwareSerial stream, or Serial/Serial1/etc. for UART.
Adafruit_ESP8266 wifi(&softser, &Serial, ESP_RST);
// Must call begin() on the stream(s) before using Adafruit_ESP8266 object.

#define ESP_SSID "CENSORED" // Your network name here
#define ESP_PASS "CENSORED" // Your network password here

char SUBJECT[]  = "My ESP8266";
char EMAIL_CONTENT[] = "Hello,\r\nThis is a message from your ESP8266.";

// We'll need your EMAIL_FROM and its EMAIL_PASSWORD base64 encoded, you can use

#define HOST     "CENSORED"     // Find/Google your email provider's SMTP outgoing server name for unencrypted email

#define PORT     587                     // Find/Google your email provider's SMTP outgoing port for unencrypted email

int count = 0; // we'll use this int to keep track of which command we need to send next
bool send_flag = false; // we'll use this flag to know when to send the email commands

void setup() {
  char buffer[50];

  // This might work with other firmware versions (no guarantees)
  // by providing a string to ID the tail end of the boot message:
  // comment/replace this if you are using something other than v!

  softser.begin(9600); // Soft serial connection to ESP8266
  Serial.begin(57600); while(!Serial); // UART serial debug

  Serial.println(F("Adafruit ESP8266 Email"));

  // Test if module is ready
  Serial.print(F("Hard reset..."));
  if(!wifi.hardReset()) {
    Serial.println(F("no response from module."));

  Serial.print(F("Soft reset..."));
  if(!wifi.softReset()) {
    Serial.println(F("no response from module."));

  Serial.print(F("Checking firmware version..."));
  if(wifi.readLine(buffer, sizeof(buffer))) {
    wifi.find(); // Discard the 'OK' that follows
  } else {

  Serial.print(F("Connecting to WiFi..."));
  if(wifi.connectToAP(F(ESP_SSID), F(ESP_PASS))) {

    // IP addr check isn't part of library yet, but
    // we can manually request and place in a string.
    Serial.print(F("OK\nChecking IP addr..."));
    if(wifi.readLine(buffer, sizeof(buffer))) {
        wifi.find(); // Discard the 'OK' that follows

        Serial.print(F("Connecting to host..."));

        wifi.println("AT+CIPMUX=0"); // configure for single connection, 
                                     //we should only be connected to one SMTP server
        wifi.closeTCP(); // close any open TCP connections
        Serial.println("Type \"send it\" to send an email");
    } else { // IP addr check failed
  } else { // WiFi connection failed

void loop() {

    if(!send_flag){ // check if we expect to send an email
        if(Serial.available()){  // there is data in the serial, let's see if the users wants to "send it" [the email]
            if(Serial.find("send it")){  // set the send_flag when the uses types "send it" in the serial monitor.
                Serial.println("Sending email...");
                send_flag = true;

    if(send_flag){ // the send_flat is set, this means we are or need to start sending SMTP commands
        if(do_next()){ // execute the next command
            count++; // increment the count so that the next command will be executed next time.

// do_next executes the SMTP command in the order required.
boolean do_next()

    case 0:
        return wifi.connectTCP(F(HOST), PORT);
    case 1:
        // send "HELO ip_address" command. Server will reply with "250" and welcome message
        return wifi.cipSend("HELO",F("250")); // ideally an ipaddress should go in place 
                                                           // of "" but I think the email providers
                                                           // check the IP anyways so I just put anything.                                   
    case 2:
        // send "AUTH LOGIN" command to the server will reply with "334 username" base 64 encoded
        return wifi.cipSend("AUTH LOGIN",F("334 VXNlcm5hbWU6"));
    case 3:
        // send username/email base 64 encoded, the server will reply with "334 password" base 64 encoded
        return wifi.cipSend(EMAIL_FROM_BASE64,F("334 UGFzc3dvcmQ6")); 
    case 4:
        // send password base 64 encoded, upon successful login the server will reply with 235.
        return wifi.cipSend(EMAIL_PASSWORD_BASE64,F("235"));
    case 5:{
        // send "MAIL FROM:<>" command
        char mailFrom[50] = "MAIL FROM:<"; // If 50 is not long enough change it, do the same for the array in the other cases

        return wifi.cipSend(mailFrom,F("250"));
    case 6:{
        // send "RCPT TO:<>" command
        char rcptTo[50] = "RCPT TO:<";
        return wifi.cipSend(rcptTo,F("250"));  
    case 7:
        // Send "DATA"  command, the server will reply with something like "334 end message with \r\n.\r\n."
        return wifi.cipSend("DATA",F("354"));
    case 8:{
        // apply "FROM: from_name <>" header
        char from[100] = "FROM: ";
        strcat(from," ");
        return wifi.cipSend(from);  
    case 9:{
        // apply TO header 
        char to[100] = "TO: ";
        return wifi.cipSend(to);  
    case 10:{
        // apply SUBJECT header
        char subject[50] = "SUBJECT: ";
        return wifi.cipSend(subject);
    case 11:
        return wifi.cipSend("\r\n");   // marks end of header (SUBJECT, FROM, TO, etc);
    case 12:
        return wifi.cipSend(EMAIL_CONTENT);
    case 13:
        return wifi.cipSend("\r\n.");  // marks end of data command
    case 14:
        return wifi.cipSend("QUIT");
    case 15:
        return true;
    case 16:
        send_flag = false;
        count = 0;
        return false; // we don't want to increment the count

(the CENSORED weren’t in the actual code)
the serial output looped “—> AT+CIPSEND=12
<— 'link is not” around the end, and nothing else happened.
what did i do wrong?