You never close the connection. But blocking pending email confirmation can take a long time. You should consider a small state machine for your network connection.
void loop()
{
if (client.connect(server, 80)) {
}
delay(6000);
}
The state machine for your application might look like this:
enum EmailState {
emIdle, emSendMail, emCheckMailSent, emEmailOK, emEmailError,
};
EmailState email_state;
unsigned long long mail_timer;
static void on_emIdle()
{
email_state = (triggered) ? emSendMail : emIdle;
}
static void on_sendMail()
{
if (client.connect())
{
email_state = emCheckMailSent;
return;
}
email_state = emEmailError;
}
static void on_emCheckMailSent()
{
email_state = emCheckMailSent;
}
static void on_emEmailOK()
{
if ()
client.disconnect();
if (!mail_timer)
mail_timer = millis();
if (millis() - mail_timer < 6000)
{
email_state = emEmailOK;
return;
}
mail_timer = 0;
email_state = emIdle;
}
static void on_emEmailError()
{
if ()
client.disconnect();
email_state = emIdle;
}
void loop()
{
switch(email_state)
{
default:
case emIdle: on_emIdle(); break;
case emSendMail: on_emSendMail(); break;
case emCheckMailSent: on_emCheckMailSent(); break;
case emEmailOK: on_emEmailOK(); break;
case emEmailError: on_emEmailError(); break;
}
}