Hello,
Who can advise me regarding ESP32- cam Module3 Unit 1
Compiling the sketch seems oke but I do not succeed to have an email sent
Here, you find the comport communication after reset my Cam-board:
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Connecting to WiFi….
SPIFFS mounted successfully
IP Address: http://192.168.11.148
Taking a photo…
Picture file name: /photo.jpg
E (5215) SPIFFS: failed to write addr fffffffe, size 00000002, err 258
The picture has been saved in /photo.jpg – Size: 18072 bytes
Connecting to SMTP server…
> C: ESP Mail Client v1.6.4
> C: connect to SMTP server
> C: host > mail.zeelandnet.nl
> C: port > 465
> C: starting socket
> C: connecting to Server
> C: seeding the random number generator
> C: setting up the SSL/TLS structure
! W: Skipping SSL Verification. INSECURE!
> C: setting hostname for TLS session
> C: performing the SSL/TLS handshake
> C: verifying peer X.509 certificate
> C: smtp server connected
SMTP server connected, wait for greeting…
< S: 220 mail.zeelandnet.nl ESMTP Postfix
Sending greeting response…
> C: send smtp command, HELO
< S: 250-mail.zeelandnet.nl
< S: 250-PIPELINING
< S: 250-SIZE 20480000
< S: 250-VRFY
< S: 250-ETRN
< S: 250-AUTH PLAIN LOGIN
< S: 250-AUTH=PLAIN LOGIN
< S: 250-ENHANCEDSTATUSCODES
< S: 250-8BITMIME
< S: 250 DSN
Logging in…
> C: send smtp command, AUTH PLAIN
> C: abom1@zeelandnet.nl
> C: abom1@zeelandnet.nl ***********
< S: 235 2.7.0 Authentication successful
Sending Email…
> C: send Email
Sending message header…
> C: send message header
< S: 250 2.1.0 Ok
< S: 501 5.5.4 Error: Bad NOTIFY parameter syntax
Error, set recipient failed
> E: set recipient failed
> C: cleaning SSL connection
Error sending Email, set recipient failed
As I am sure the emailrecipient is correct I do not understand what’s going wrong here…..
Thank you very much for any suggestion
Alex
Hi.
The error is related to the email recipient.
Without further information, I can’t tell what might be wrong.
Can you please share your code with me? With the email recipient on the code? I can remove the email later from the comment, or send me the code via email, make sure you don’t share the email password.
Regards,
Sara
/*********
Rui Santos
Complete instructions at https://RandomNerdTutorials.com/esp32-cam-projects-ebook/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include “esp_camera.h”
#include “SPI.h”
#include “driver/rtc_io.h”
#include <ESP_Mail_Client.h>
#include <FS.h>
#include <SPIFFS.h>
#include <WiFi.h>
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = “########”;
const char* password = “#########”;
// To send Email using Gmail use port 465 (SSL) and SMTP Server smtp.gmail.com
// YOU MUST ENABLE less secure app option https://myaccount.google.com/lesssecureapps?pli=1
#define emailSenderAccount “xxxx@zeelandnet.nl”
#define emailSenderPassword “##########”
#define smtpServer “mail.zeelandnet.nl”
#define smtpServerPort 465
#define emailSubject “ESP32-CAM Photo Captured”
#define emailRecipient “xxxx@zeelandnet.nl”
#define CAMERA_MODEL_AI_THINKER
#if defined(CAMERA_MODEL_AI_THINKER)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#else
#error “Camera model not selected”
#endif
/* The SMTP Session object used for Email sending */
SMTPSession smtp;
/* Callback function to get the Email sending status */
void smtpCallback(SMTP_Status status);
// Photo File Name to save in SPIFFS
#define FILE_PHOTO “photo.jpg”
#define FILE_PHOTO_PATH “/photo.jpg”
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
Serial.begin(115200);
Serial.println();
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.print(“Connecting to WiFi…”);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println();
if (!SPIFFS.begin(true)) {
Serial.println(“An Error has occurred while mounting SPIFFS”);
ESP.restart();
}
else {
delay(500);
Serial.println(“SPIFFS mounted successfully”);
}
// Print ESP32 Local IP Address
Serial.print(“IP Address: http://”);
Serial.println(WiFi.localIP());
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
// Initialize camera
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf(“Camera init failed with error 0x%x”, err);
return;
}
capturePhotoSaveSpiffs();
sendPhoto();
}
void loop() {
}
// Check if photo capture was successful
bool checkPhoto( fs::FS &fs ) {
File f_pic = fs.open( FILE_PHOTO_PATH );
unsigned int pic_sz = f_pic.size();
return ( pic_sz > 100 );
}
// Capture Photo and Save it to SPIFFS
void capturePhotoSaveSpiffs( void ) {
camera_fb_t * fb = NULL; // pointer
bool ok = 0; // Boolean indicating if the picture has been taken correctly
do {
// Take a photo with the camera
Serial.println(“Taking a photo…”);
fb = esp_camera_fb_get();
if (!fb) {
Serial.println(“Camera capture failed”);
return;
}
// Photo file name
Serial.printf(“Picture file name: %s\n”, FILE_PHOTO_PATH);
File file = SPIFFS.open(FILE_PHOTO_PATH, FILE_WRITE);
// Insert the data in the photo file
if (!file) {
Serial.println(“Failed to open file in writing mode”);
}
else {
file.write(fb->buf, fb->len); // payload (image), payload length
Serial.print(“The picture has been saved in “);
Serial.print(FILE_PHOTO_PATH);
Serial.print(” – Size: “);
Serial.print(file.size());
Serial.println(” bytes”);
}
// Close the file
file.close();
esp_camera_fb_return(fb);
// check if file has been correctly saved in SPIFFS
ok = checkPhoto(SPIFFS);
} while ( !ok );
}
void sendPhoto( void ) {
/** Enable the debug via Serial port
* none debug or 0
* basic debug or 1
*/
smtp.debug(1);
/* Set the callback function to get the sending results */
smtp.callback(smtpCallback);
/* Declare the session config data */
ESP_Mail_Session session;
/* Set the session config */
session.server.host_name = smtpServer;
session.server.port = smtpServerPort;
session.login.email = emailSenderAccount;
session.login.password = emailSenderPassword;
session.login.user_domain = “”;
/* Declare the message class */
SMTP_Message message;
/* Enable the chunked data transfer with pipelining for large message if server supported */
message.enable.chunking = true;
/* Set the message headers */
message.sender.name = “ESP32-CAM”;
message.sender.email = emailSenderAccount;
message.subject = emailSubject;
message.addRecipient(“Sara”, emailRecipient);
String htmlMsg = “<h2>Photo captured with ESP32-CAM and attached in this email.</h2>”;
message.html.content = htmlMsg.c_str();
message.html.charSet = “utf-8”;
message.html.transfer_encoding = Content_Transfer_Encoding::enc_qp;
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_normal;
message.response.notify = esp_mail_smtp_notify_success | esp_mail_smtp_notify_failure | esp_mail_smtp_notify_delay;
/* The attachment data item */
SMTP_Attachment att;
/** Set the attachment info e.g.
* file name, MIME type, file path, file storage type,
* transfer encoding and content encoding
*/
att.descr.filename = FILE_PHOTO;
att.descr.mime = “image/png”;
att.file.path = FILE_PHOTO_PATH;
att.file.storage_type = esp_mail_file_storage_type_flash;
att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64;
/* Add attachment to the message */
message.addAttachment(att);
/* Connect to server with the session config */
if (!smtp.connect(&session))
return;
/* Start sending the Email and close the session */
if (!MailClient.sendMail(&smtp, &message, true))
Serial.println(“Error sending Email, ” + smtp.errorReason());
}
// Callback function to get the Email sending status
void smtpCallback(SMTP_Status status){
/* Print the current status */
Serial.println(status.info());
/* Print the sending result */
if (status.success())
{
Serial.println(“—————-“);
Serial.printf(“Message sent success: %d\n”, status.completedCount());
Serial.printf(“Message sent failled: %d\n”, status.failedCount());
Serial.println(“—————-\n”);
struct tm dt;
for (size_t i = 0; i < smtp.sendingResult.size(); i++)
{
/* Get the result item */
SMTP_Result result = smtp.sendingResult.getItem(i);
time_t ts = (time_t)result.timestamp;
localtime_r(&ts, &dt);
Serial.printf(“Message No: %d\n”, i + 1);
Serial.printf(“Status: %s\n”, result.completed ? “success” : “failed”);
Serial.printf(“Date/Time: %d/%d/%d %d:%d:%d\n”, dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
Serial.printf(“Recipient: %s\n”, result.recipients);
Serial.printf(“Subject: %s\n”, result.subject);
}
Serial.println(“—————-\n”);
}
}
Hi Sara
I found out that this link is working for module 3/ unit 1:
https://raw.githubusercontent.com/RuiSantosdotme/ESP32-CAM-eBook/master/Code/Module_3/Send_Photos_Email/Send_Photos_Email.ino
but the code in the link below, belonging to the book, is not working for me.
Please try it:
https://github.com/RuiSantosdotme/ESP32-CAM-eBook/blob/master/Code/Module_3/Send_Photos_Email_NEW/Send_Photos_Email_NEW.ino
If I compare both codes there are some differences.
one of the diffences is:
#include <ESP_Mail_Client.h>
and
#include "ESP32_MailClient.h"
but here are more differnces ..., just check it please
Alex
Hi.
Each example uses a different library.
What is the library that you have installed?
The old code used this library (deprecated): https://github.com/mobizt/ESP32-Mail-Client
The new code uses the new library: https://github.com/mobizt/ESP-Mail-Client
You must have the corresponding library for the code you want to use.
Regards,
Sara
Hi
The old code regarding:this link: https://github.com/mobizt/ESP32-Mail-Client
works well and uses library : “ESP32_MailClient.h”
I only want to tell you that the links in the book need to be updated, that’s all…..
discussion closed….
Kind regards,
Alex