Aller au contenu

Hermes — Envoi d'e-mails avec Himalaya

Résumé

Procédure complète pour configurer l'envoi d'e-mails via Himalaya (CLI email Rust) depuis Hermes Agent. Applicable soit à l'intérieur du conteneur Docker (pour que Hermes lui-même envoie des mails via skills ou crons), soit sur l'hôte pour des tests manuels.

Contenu structuré

Où exécuter la procédure ?

  • Dans le conteneur → Hermes peut envoyer des e-mails depuis ses skills/crons
  • Sur l'hôte → tests manuels uniquement
# Ouvrir un shell dans le conteneur hermes-telegram
docker exec -it --user hermes hermes-telegram bash

1. Installer Rust/Cargo

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Vérifier : rustc --version && cargo --version

2. Installer Himalaya

cargo install himalaya --locked
# Vérifier : himalaya --version

3. Créer le fichier de configuration

mkdir -p ~/.config/himalaya

Contenu de ~/.config/himalaya/config.toml :

[accounts.default]
email = "VOTRE_EMAIL@exemple.com"
display-name = "Votre Nom"
default = true

backend.type = "smtp"
backend.host = "SMTP_HOST"          # ex: smtp.gmail.com
backend.port = 587                  # 465 pour SSL, 587 pour STARTTLS
backend.encryption.type = "start-tls"
backend.login = "VOTRE_EMAIL@exemple.com"
backend.auth.type = "password"
backend.auth.cmd = "cat $HOME/.himalaya_smtp_pass"

Exemple Gmail :

backend.host = "smtp.gmail.com"
backend.port = 587
backend.encryption.type = "start-tls"
backend.login = "votre.compte@gmail.com"
backend.auth.cmd = "cat $HOME/.himalaya_smtp_pass"

4. Créer le fichier de mot de passe (protégé)

echo "VOTRE_MOT_DE_PASSE_OU_TOKEN" > ~/.himalaya_smtp_pass
chmod 600 ~/.himalaya_smtp_pass

5. Tester l'envoi

cat << EOF | himalaya template send
From: votre.email@exemple.com
mailto: destinataire@exemple.com
Subject: Test depuis Hermes Agent

Bonjour, ceci est un test via Himalaya.

Cordialement,
EOF

6. Fonction shell réutilisable

envoyer_mail() {
  local destinataires="$1"
  local sujet="$2"
  local corps="$3"
  cat << EOF | himalaya template send
From: $(himalaya account list --raw | jq -r '.default.email')
mailto: $destinataires
Subject: $sujet

$corps
EOF
}
# Usage :
envoyer_mail "dest@ex.com" "Sujet" "Corps du message"

Récapitulatif copy-paste complet

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc

# Himalaya
cargo install himalaya --locked

# Config
mkdir -p ~/.config/himalaya
cat > ~/.config/himalaya/config.toml <<'EOF'
[accounts.default]
email = "VOTRE_EMAIL@exemple.com"
display-name = "Votre Nom"
default = true

backend.type = "smtp"
backend.host = "SMTP_HOST"
backend.port = 587
backend.encryption.type = "start-tls"
backend.login = "VOTRE_EMAIL@exemple.com"
backend.auth.type = "password"
backend.auth.cmd = "cat $HOME/.himalaya_smtp_pass"
EOF

# Mot de passe
echo "VOTRE_MOT_DE_PASSE_OU_TOKEN" > ~/.himalaya_smtp_pass
chmod 600 ~/.himalaya_smtp_pass

Points clés

  • Installer dans le conteneur si Hermes doit envoyer des mails (skills, crons)
  • Privilégier le fichier protégé chmod 600 — jamais le mot de passe en clair
  • Les fichiers ~/.config/himalaya/ et ~/.himalaya_smtp_pass sont perdus si le conteneur est supprimé → monter un volume pour les persister
  • Himalaya gère nativement l'UTF-8 et les accents

Dépannage

Erreur Solution
Authentication failed Vérifier mot de passe/token, port et type de chiffrement
Connection refused Vérifier l'accès Internet du conteneur (pare-feu, DNS)
Command not found Vérifier que ~/.cargo/bin est dans le PATH

Diagnostic détaillé : RUST_LOG=debug himalaya template send …

Liens connexes