#define BUTTON_PIN 2
String email = "";
String message = "";
bool emailEntered = false;
bool messageEntered = false;
bool emailSent = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 200;
// -------- Email Validation --------
bool isValidEmail(String e) {
e.trim();
if (e.length() < 6) return false;
if (e.indexOf(' ') != -1) return false;
int atPos = e.indexOf('@');
int dotPos = e.lastIndexOf('.');
if (atPos <= 0) return false;
if (dotPos <= atPos + 1) return false;
if (dotPos >= e.length() - 1) return false;
return true;
}
// -------- Reset Function --------
void resetProgram() {
email = "";
message = "";
emailEntered = false;
messageEntered = false;
emailSent = false;
Serial.println("\nEnter your email:");
}
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("===== Email Sender System =====");
Serial.println("Enter your email:");
}
void loop() {
// -------- Serial Input Handling --------
if (Serial.available()) {
String input = Serial.readStringUntil('\n');
input.trim();
if (!emailEntered) {
if (isValidEmail(input)) {
email = input;
emailEntered = true;
Serial.println(" Valid email accepted.");
Serial.println("Enter your message:");
} else {
Serial.println(" Invalid email! Try again:");
}
}
else if (!messageEntered) {
message = input;
messageEntered = true;
Serial.println(" Message saved.");
Serial.println("Press the button to send the email...");
}
}
// -------- Button Handling with Debounce --------
if (emailEntered && messageEntered && !emailSent) {
if (digitalRead(BUTTON_PIN) == LOW) {
if ((millis() - lastDebounceTime) > debounceDelay) {
Serial.println("\n📨 Sending Email...");
Serial.println("To : " + email);
Serial.println("Message : " + message);
delay(1000);
Serial.println(" Email sent successfully!");
emailSent = true;
lastDebounceTime = millis();
delay(1000);
resetProgram();
}
}
}
}