Send Email Notifications from Arduino with PHP Mail Function

You can send SMTP (email) notifications using an Arduino Uno with WiFi and a web server with PHP using the mail() function in PHP. You POST data to the web server from the Arduino and then the server can parse the POST data using PHP.

Note: The mail() function uses the email server configured on the web server. Shared hosting plans should have this setup by default. If you plan to pin up your own server you’ll need to install and configure an email server in addition to Apache and PHP.

Functional Parts in the Project:

#include <WiFiNINA.h>

#define sensorPin A5

char ssid[] = "test";
char pass[] = "";

int status = WL_IDLE_STATUS;

char server[] = "www.failednormal.com";

String postData;
String postVariable = "temp=";

WiFiClient client;

void setup() {

  Serial.begin(9600);

  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }

  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
}

void loop() {
  int reading = analogRead(sensorPin);
  float voltage = reading * 5.0;
  voltage /= 1024.0;
  float temperatureC = (voltage - 0.5) * 100 ;
  float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

  postData = postVariable + temperatureF;

if (temperatureF >= 80){
  if (client.connect(server, 80)) {
    client.println("POST /test/emailScript.php HTTP/1.1");
    client.println("Host: www.failednormal.com");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(postData.length());
    client.println();
    client.print(postData);

    Serial.println("Email Sent");
    Serial.println(postData);
  }

  if (client.connected()) {
    client.stop();
  }

  delay(60000);
}

  Serial.println(postData);

  delay(3000);
}

emailScript.php

<?php

$time = time();
$timestamp = date("H:i:s", $time);

$tempF = $_POST["temp"];

$to = "test@geekvid.com";
$subject = "Temperature ALERT";
$message = "At: ".$timestamp." the Temperature reached ".$tempF;
$headers = "From:AlertSystem@ETCG.com";

mail($to, $subject, $message, $headers);

print "Script Ran $time";

?>

Be the first to comment

Leave a Reply