🛠 Alerte email : bouton sur la Yún et envoi via sendmail
Objectifs
Construire une alerte physique → email : un bouton sur une broche du 32U4 déclenche l'envoi d'un email depuis Linino OS. Deux voies sont comparées : la route REST /mail/send (zéro dépendance) et la bibliothèque YunMail (API propre côté sketch). Vous configurerez un compte SMTP (fournisseur ou Gmail avec mot de passe d'application) dans la page d'administration de la carte.
Matériel
- 1 Arduino Yún connectée à Internet (sortie SMTP port 465/587 requise — certains FAI bloquent le 25)
- 1 bouton poussoir entre la pin 2 et GND (pull-up interne)
- Un compte SMTP testable (le vôtre, ou un compte de test)
- PC pour configurer arduino.local > onglet « Mail »
Configuration SMTP
Dans la page d'administration (http://arduino.local, mot de passe root), renseignez : serveur SMTP, port, utilisateur, mot de passe, expéditeur. Linino OS utilise un sendmail allégé ; les logs SMTP consultables en SSH (logread) aident au debug.
Code complet
// Alerte email sur appui, avec anti-répetition de 30 s.
#include <Bridge.h>
#include <YunMail.h>
const uint8_t BTN = 2;
const uint32_t PAUSE = 30000;
uint32_t dernierEnvoi = 0;
bool dernierEtat = HIGH;
void setup {
pinMode(BTN, INPUT_PULLUP);
Bridge.begin;
Console.begin;
Mail.begin; // YunMail : pilote la file sendmail côté Linux
Mail.from("alerte@exemple.fr");
Mail.to("moi@exemple.fr", "Moi");
Mail.subject("Yun : bouton presse");
Console.println(F("pret"));
}
void loop {
bool état = digitalRead(BTN);
bool front = (état == LOW && dernierEtat == HIGH);
dernierEtat = état;
if (front && millis - dernierEnvoi >= PAUSE) {
dernierEnvoi = millis;
Mail.println(F("Quelqu'un a appuye sur le bouton."));
Mail.println(F("Cordialement, votre Yuniste."));
int id = Mail.send; // met en file ; l'envoi part côté Linux
Console.print(F("mail mis en file, id=")); Console.println(id);
}
// L'alternative REST, sans YunMail :
// Process p; p.runShellCommandOnLinux(
// "curl -s 'http://localhost/mail/send/moi@example.fr/Alerte/Bouton'");
}
Vérification attendue
Appui → quelques secondes plus tard, l'email arrive (l'envoi est asynchrone : la file part via sendmail côté Linux). Le Moniteur affiche l'id de mise en file. Testez l'échec : mauvais mot de passe SMTP → rien n'arrive ; regardez alors logread en SSH côté Linux, les erreurs d'authentification y sont tracées. L'anti-répetition de 30 s empêche le spam en cas d'appuis multiples.
Erreurs fréquentes
- SMTP bloqué par le FAI : le port 25 sortant est souvent coupé côté box — utilisez 465 (SSL) ou 587 (STARTTLS) selon le fournisseur.
- Gmail sans « mot de passe d'application » : la simple authentification basique est refusée depuis 2021 ; créez un mot de passe d'application dédié (ou un autre fournisseur SMTP).
- Attendre un envoi synchrone : Mail.send met en file ; le sketch continue. Pour savoir si c'est parti, il faut relire les logs Linux.
- Exposer ses identifiants dans le code : les identifiants SMTP vivent dans la config Linux (passés par la page web), pas dans le sketch — ne les coduez jamais en dur dans le croquis.
- Confondre /mail/send (route REST, corps dans l'URL, limité en longueur) et YunMail (corps multi-lignes propre) : préférez YunMail pour tout contenu non trivial.
- Le corps passé dans l'URL doit encoder les espaces (+) et éviter les caractères réservés — source d'emails tronqués mystérieux.
Autres tutoriels pour cette carte
- Premiers pas sur la Yún : Bridge, Console et LED
- Connecter la Yún au WiFi et piloter une broche depuis le navigateur
- Envoyer un capteur analogique sur le réseau : potentiomètre et Bridge REST
- runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
- L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
- Serveur web embarqué : YunServer, YunClient et pages dynamiques
Exemples de code pour cette carte
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino