#include <stdio.h>
#include <string.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "tcpip_adapter.h"
#include "esp_sntp.h"
#include "lwip/sockets.h"
#define SMTP_SERVER "smtp.gmail.com"
#define SMTP_PORT 587
#define USERNAME "[email protected]"
#define PASSWORD "your_password"
void send_smtp_email()
{
int sock;
struct sockaddr_in server_addr;
char buffer[1024];
// Step 1: Create socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("Failed to create socket\n");
return;
}
// Step 2: Configure server address
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SMTP_PORT);
server_addr.sin_addr.s_addr = inet_addr(SMTP_SERVER);
// Step 3: Connect to server
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
printf("Connection failed\n");
close(sock);
return;
}
// Step 4: Send EHLO command (SMTP initiation)
snprintf(buffer, sizeof(buffer), "EHLO esp32\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 5: Send STARTTLS command
snprintf(buffer, sizeof(buffer), "STARTTLS\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 6: Authenticate using USERNAME and PASSWORD
snprintf(buffer, sizeof(buffer), "AUTH LOGIN\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Send username in base64
// (Here you need to encode USERNAME and PASSWORD in base64)
snprintf(buffer, sizeof(buffer), "your_base64_encoded_username\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
snprintf(buffer, sizeof(buffer), "your_base64_encoded_password\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 7: Send MAIL FROM command
snprintf(buffer, sizeof(buffer), "MAIL FROM:<%s>\r\n", USERNAME);
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 8: Send RCPT TO command
snprintf(buffer, sizeof(buffer), "RCPT TO:<[email protected]>\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 9: Send DATA command
snprintf(buffer, sizeof(buffer), "DATA\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 10: Send email body
snprintf(buffer, sizeof(buffer),
"From: <%s>\r\n"
"To: <[email protected]>\r\n"
"Subject: Test Email from ESP32\r\n"
"\r\n"
"This is a test email sent from ESP32.\r\n"
".\r\n", USERNAME);
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Step 11: Send QUIT command
snprintf(buffer, sizeof(buffer), "QUIT\r\n");
send(sock, buffer, strlen(buffer), 0);
recv(sock, buffer, sizeof(buffer), 0);
// Close the socket
close(sock);
printf("Email sent successfully!\n");
}
void app_main(void)
{
// Setup Wi-Fi connection and network initialization here...
// Once connected, call send_smtp_email()
send_smtp_email();
}