Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/01/2025, à 12:19

lebossejames

envoi email en une simple ligne de commande

Bonjour,

Je souhaiterais pouvoir envoyer un e-mail en une simple ligne de commande sans paramétrer le moindre fichier de conf, est-il possible?

MESSAGE_BODY="Test mail"
EMAIL_SUBJECT="Testing Email from Shell Script with SMTP-01"
FROM_EMAIL_ADDRESS="test@outlook.com"
#FRIENDLY_NAME="NO Reply test"
SMTP_SERVER="smtp-mail.outlook.com"
SMTP_PORT="587"
SMTP_USER="test@outlook.com"
SMTP_PASS="XXXXX"
###### for multi recipient please use space between address
TO_EMAIL_ADDRESS="dest@outlook.com"

echo $MESSAGE_BODY | msmtp -v --host=$SMTP_SERVER --port=$SMTP_PORT --password=<(echo "$SMTP_PASS") --auth=on --user=$SMTP_USER --tls=on --tls-starttls=on --from="$FROM_EMAIL_ADDRESS"  $FROM_EMAIL_ADDRESS

 echo $MESSAGE_BODY | mail -s "$EMAIL_SUBJECT" \
            -S smtp-use-starttls \
            -S ssl-verify=ignore \
            -S smtp-auth=login \
            -S smtp=smtp://$SMTP_SERVER:$SMTP_PORT \
            -S from="$FROM_EMAIL_ADDRESS" \
            -S smtp-auth-user=$SMTP_USER \
            -S smtp-auth-password=$SMTP_PASS \
            -S ssl-verify=ignore \
            -a file.pdf \
            $TO_EMAIL_ADDRESS

Merci d'avance.

Dernière modification par lebossejames (Le 05/03/2025, à 22:29)

Hors ligne

#2 Le 29/01/2025, à 12:33

iznobe

Re : envoi email en une simple ligne de commande

Bonjour , c' est possible , il y a des dizaines de tutos sur le net .



envoyer un e-mail en une simple ligne de commande

PS : on a pas la même définition d' une ligne tongue
il s' agit d' un script de commandes , pas d' une ligne .

Dernière modification par iznobe (Le 29/01/2025, à 12:33)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 29/01/2025, à 13:32

sputnick

Re : envoi email en une simple ligne de commande

Salut.

pour envoyer des pièces jointes, je recommande s-nail:

$ apt-cache show s-nail
Package: s-nail
Architecture: amd64
Version: 14.9.24-2build2
Multi-Arch: foreign
Priority: optional
Section: universe/mail
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Paride Legovini <paride@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1082
Provides: imap-client, mail-reader
Depends: base-files (>= 2.2.0), debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.38), libgssapi-krb5-2 (>= 1.17), libidn2-0 (>= 2.0.0), libssl3t64 (>= 3.0.0), libtinfo6 (>= 6)
Suggests: default-mta | mail-transport-agent
Replaces: nail
Filename: pool/universe/s/s-nail/s-nail_14.9.24-2build2_amd64.deb
Size: 554148
MD5sum: 099858833ab303cb9b468eb1d0e3d1d4
SHA1: 2b250c7921878d43333b552f4b1910e7e996f83f
SHA256: 1d9b605ec2efa1cb0dd9c0a5170a8637ff1c03a9ae3fbbc2b9dd532fee8c6edd
SHA512: b946b9088c2d46aa509a4f727d60179ac4215a811682adc05f574d34c669b28fbd44d5b5fc7cb74df4127ad34428165700bcc48843698c8b21adf0a298a92710
Homepage: https://www.sdaoden.eu/code.html
Description-en: feature-rich BSD mail(1)
 S-nail is a mail processing system with a command syntax reminiscent
 of ed(1) with lines replaced by messages. It is intended to provide
 the functionality of the POSIX mailx(1) command and offers (mostly
 optional) extensions for line editing, IDNA, MIME, S/MIME, SMTP and
 POP3 (and IMAP). It is usable as a mail batch language. S-nail is a
 derivative of Heirloom mailx, formerly known as nail, which
 itself is based upon Berkeley Mail that has a history back to the 70s.
Description-md5: 03cd2ad714c52e3b66e646a7a50f7ea8

Un seul être vous manque et tout est dépeuplé. Lamartine
https://sputnick.fr

Hors ligne

#4 Le 29/01/2025, à 13:36

krodelabestiole

Re : envoi email en une simple ligne de commande

lebossejames a écrit :

sans paramétrer le moindre fichier de conf

en local sûrement mais sur internet, non (à moins qu'il n'ait pas besoin d'arriver à destination).
il faudrait sans doute que tu décrives plus généralement ce que tu cherches à faire.

tu peux éventuellement jeter un œil à mailutils ou bsd-mailx, et à msmtp, et aux tests de fonctionnement. c'est souvent la solution la plus simple à mettre en œuvre pour envoyer un email depuis un script ou un terminal.
dans le même genre ssmtp est abandonné mais tout n'est pas non plus à jeter dans la doc : https://doc.ubuntu-fr.org/ssmtp#en_ligne_de_commande

Hors ligne

#5 Le 29/01/2025, à 13:50

lebossejames

Re : envoi email en une simple ligne de commande

krodelabestiole a écrit :
lebossejames a écrit :

sans paramétrer le moindre fichier de conf

en local sûrement mais sur internet, non (à moins qu'il n'ait pas besoin d'arriver à destination).
il faudrait sans doute que tu décrives plus généralement ce que tu cherches à faire.

tu peux éventuellement jeter un œil à mailutils ou bsd-mailx, et à msmtp, et aux tests de fonctionnement. c'est souvent la solution la plus simple à mettre en œuvre pour envoyer un email depuis un script ou un terminal.
dans le même genre ssmtp est abandonné mais tout n'est pas non plus à jeter dans la doc : https://doc.ubuntu-fr.org/ssmtp#en_ligne_de_commande

Avoir un script bash dont lequel j'aurais une seule commande d'envoi de mail (objet, corps du message) avec pièce jointe attaché en ayant des paramètres email destinataire, email source, server stmp qui sera utilisé pour l'envoi avec les infos de connexions.

Hors ligne

#6 Le 29/01/2025, à 14:23

krodelabestiole

Re : envoi email en une simple ligne de commande

dans ce cas tu peux passer toutes les infos de connexion en paramètres de commande : https://manpages.ubuntu.com/manpages/tr … mtp.1.html

Hors ligne

#7 Le 29/01/2025, à 23:26

lebossejames

Re : envoi email en une simple ligne de commande

J'obtiens ceci:

SMTP_PASS="monmotdepasse@"
echo $MESSAGE_BODY | msmtp -v --host=$SMTP_SERVER --port=$SMTP_PORT --password="$SMTP_PASS" --auth=on --user=$SMTP_USER --tls=on --tls-starttls=on --from="$FROM_EMAIL_ADDRESS"  $TO_EMAIL_ADDRESS
sh: 1: monmotdepasse@: not found
msmtp: impossible de lire la sortie de "monmotdepasse@"

Hors ligne

#8 Le 04/03/2025, à 19:33

lebossejames

Re : envoi email en une simple ligne de commande

lebossejames a écrit :

J'obtiens ceci:

SMTP_PASS="monmotdepasse@"
echo $MESSAGE_BODY | msmtp -v --host=$SMTP_SERVER --port=$SMTP_PORT --password="$SMTP_PASS" --auth=on --user=$SMTP_USER --tls=on --tls-starttls=on --from="$FROM_EMAIL_ADDRESS"  $TO_EMAIL_ADDRESS
sh: 1: monmotdepasse@: not found
msmtp: impossible de lire la sortie de "monmotdepasse@"

Sauriez-vous me dire d'où vient cette erreur svp?

Merci.

Hors ligne

#9 Le 04/03/2025, à 19:55

Sciensous

Re : envoi email en une simple ligne de commande

sans doute les " autour de monmotdepasse@ ?
(mal acceptées par le pipe | )


sous ubuntu LTS de la 06 à la 22.04, puis arrêt pour Debian 12 et antiX 21 ou 23
( sous LXDE et gnome-shell )

Hors ligne

#10 Le 05/03/2025, à 10:25

lebossejames

Re : envoi email en une simple ligne de commande

Sciensous a écrit :

sans doute les " autour de monmotdepasse@ ?
(mal acceptées par le pipe | )

J'obtiens maintenant sur mon script bash:

sh: 1: monmotdepasse@: not found
msmtp: cannot read output of 'monmotdepasse@'

Hors ligne

#11 Le 05/03/2025, à 12:47

Watael

Re : envoi email en une simple ligne de commande

ce que je comprends du man c'est que cette option ne contient pas le mot de passe, mais le chemin d'un fichier de conf qui, lui, contient le mot de passe en clair (ou pas selon passwordeval).

la doc a écrit :

Store the password in the configuration file using the password command.

cf. https://marlam.de/msmtp/msmtp.html#Authentication

peut-être avec une Substitution de processus

--password=<(echo "$SMTP_PASS")

?

Dernière modification par Watael (Le 05/03/2025, à 12:48)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 05/03/2025, à 16:28

lebossejames

Re : envoi email en une simple ligne de commande

Watael a écrit :

ce que je comprends du man c'est que cette option ne contient pas le mot de passe, mais le chemin d'un fichier de conf qui, lui, contient le mot de passe en clair (ou pas selon passwordeval).

la doc a écrit :

Store the password in the configuration file using the password command.

cf. https://marlam.de/msmtp/msmtp.html#Authentication

peut-être avec une Substitution de processus

--password=<(echo "$SMTP_PASS")

?

Maintenant j'ai :


utilisation du compte spécifié sur la ligne de commande
sh: 1: /dev/fd/63: Permission denied
msmtp: cannot read output of '/dev/fd/63'

Je précise que mon SMTP_PASS contient [A-Z0-9@] .

Hors ligne

#13 Le 05/03/2025, à 18:07

iznobe

Re : envoi email en une simple ligne de commande

Bonjour , juste pour savoir , tu utilises le script donnée au message #1 ?


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#14 Le 05/03/2025, à 19:28

lebossejames

Re : envoi email en une simple ligne de commande

iznobe a écrit :

Bonjour , juste pour savoir , tu utilises le script donnée au message #1 ?

Désolé j'avais oublié de mettre la ligne contenant la commande msmtp, je l'ai ajouté

Hors ligne

#15 Le 05/03/2025, à 21:41

iznobe

Re : envoi email en une simple ligne de commande

cette ligne est syntaxiquement incorrecte :

SMTP_USER=test@outlook.com"

retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#16 Le 05/03/2025, à 22:30

lebossejames

Re : envoi email en une simple ligne de commande

iznobe a écrit :

cette ligne est syntaxiquement incorrecte :

SMTP_USER=test@outlook.com"

Oui en effet je confirme, cela ne change pas l'erreur constaté.

Hors ligne

#17 Le 06/03/2025, à 13:26

krodelabestiole

Re : envoi email en une simple ligne de commande

je viens de tester, chez infomaniak ça marche avec :

printf "Subject:DeQuoiOnParle\n\nLeCorpsDuMessage" | msmtp user@dest.tld --host=mail.infomaniak.com --port=587 --auth=login --tls=on --user=user@from.tld --from=user@from.tld --passwordeval="echo mot_de_passe_en_clair"

Hors ligne

#18 Le 06/03/2025, à 16:03

lebossejames

Re : envoi email en une simple ligne de commande

krodelabestiole a écrit :

je viens de tester, chez infomaniak ça marche avec :

printf "Subject:DeQuoiOnParle\n\nLeCorpsDuMessage" | msmtp user@dest.tld --host=mail.infomaniak.com --port=587 --auth=login --tls=on --user=user@from.tld --from=user@from.tld --passwordeval="echo mot_de_passe_en_clair"

J'ai essayé ceci:

echo $MESSAGE_BODY | msmtp -v $TO_EMAIL_ADDRESS --host=$SMTP_SERVER --port=$SMTP_PORT --auth=login --tls=on --user=$SMTP_USER --from=$FROM_EMAIL_ADDRESS --passwordeval="echo $SMTP_PASS" 
            

Il y a du mieux, cependant j'ai cette trace, la variable passwordeval contient echo :

password = *
passwordeval = echo monmotdepasse
ntlmdomain = (non défini)

Hors ligne

#19 Le 06/03/2025, à 17:21

iznobe

Re : envoi email en une simple ligne de commande

krodelabestiole a écrit :

je viens de tester, chez infomaniak ça marche avec :

printf "Subject:DeQuoiOnParle\n\nLeCorpsDuMessage" | msmtp user@dest.tld --host=mail.infomaniak.com --port=587 --auth=login --tls=on --user=user@from.tld --from=user@from.tld --passwordeval="echo mot_de_passe_en_clair"

heu , meme moi j' ai du mal à comprendre par et / ou quoi  remplacer dans la commande ...
du coup tu n' utilises pas le script mais uniquement la commande , on est d' accord .
c' est quoi :
+ user@dest.tld
+ user@from.tld
?
il faut remplacer respectivement par :
+ adresse mail destinataire
+ adresse mail envoyeur
?


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#20 Le 06/03/2025, à 18:45

krodelabestiole

Re : envoi email en une simple ligne de commande

--from=user@from.tld

tu remplaces user@from.tld par l'email de l'expéditeur (--from est décrit dans la doc de msmtp)
j'ai évité d'être cryptique en utilisant -f qui revient au même

user@dest.tld -> mail du destinataire
user@from.tld  -> mail de l'expéditeur

la seule subtilité c'est :

--user=user@from.tld

c'est le nom d'utilisateur (user...) pour se connecter au SMTP. c'est pas forcément un email, ça l'est chez infomaniak.


... je pense que le problème était de toute façon plutôt côté password / passwordeval

Hors ligne

#21 Le 06/03/2025, à 18:47

iznobe

Re : envoi email en une simple ligne de commande

j ' utilise ce script pour envoyer des mails automatiques :

#! /usr/bin/python
# coding: utf-8

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# variables a remplir
mailSubject = ""
mailBody = MIMEText("")

mailFrom = ""
mailTo = ""
mailCc = ""

smtpServ = "smtp.infomaniak.com"
smtpPort = 587
smtpSender = ""
smtpPass = ""
# FIN

def envoi_mail() : # expeditions multiples
    msg = MIMEMultipart()
    msg["Subject"] = mailSubject
    msg["From"] = mailFrom
    msg["To"] = mailTo
    msg["Cc"] = mailCc
    msg.attach(mailBody)
    
    smtp = smtplib.SMTP(smtpServ, 587) # connection avec le serveur
    smtp.starttls() # initialisation securisation
    smtp.login(smtpSender, smtpPass) # transmission login securise
    smtp.sendmail(msg["From"], msg["To"].split(",") + msg["Cc"].split(","), msg.as_string())
    smtp.quit()
    
envoi_mail()

c' est du python , mais au moins ca fonctionne , il n ' y a qu  ' a mettre ce que tu veux entre les "" .

il n' y a rien a toucher dans la fonction .



la seule subtilité c'est :

--user=user@from.tld

c'est le nom d'utilisateur (user...) pour se connecter au SMTP. c'est pas forcément un email, ça l'est chez infomaniak.

marche pas chez moi , j ' obtenais :

l' adresse enveloppe mon_mail n' est pas acceptée 

je viens de faire un énième essai et là ça fonctionne du 1er coup , pas compris hmm trop bizzare cette histoire .

Dernière modification par iznobe (Le 06/03/2025, à 18:56)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#22 Le 06/03/2025, à 20:42

lebossejames

Re : envoi email en une simple ligne de commande

Voici mon script bash:

#!/bin/bash
# Send Attachments
# 

versionCode="1.00"
nameBureau=""
nameProject="Send"

if [ -d "$HOME/Bureau" ] 
then
    nameBureau="Bureau"
else
    nameBureau="Desktop"

fi


### option configuration
MESSAGE_BODY="Test mail"
EMAIL_SUBJECT="Testing Email from Shell Script with SMTP-01"
FROM_EMAIL_ADDRESS="test@live.fr"
#FRIENDLY_NAME="NO Reply test"
SMTP_SERVER="smtp.office365.com"
SMTP_PORT=587
SMTP_USER="test@live.fr"
SMTP_PASS=monmotdepasse123@
###### for multi recipient please use space between address
TO_EMAIL_ADDRESS="test@live.fr"

###### How to file NSS dir use command follow this comment - find / -name "cert*.db"
#NSS_DIR="/etc/pki/nssdb/"

SMTP_CONF_FILE=$HOME/$nameBureau/$nameProject/smtp_conf.json
LAST_MONTH_FILE=$HOME/$nameBureau/$nameProject/last_month.txt
FORCE_SEND_ASK_FILE=$HOME/$nameBureau/$nameProject/forceSendAsk.txt
FORCE_SEND_ASK="false"
nbFilesSended=0
last_month=""

echo $FORCE_SEND_ASK > $FORCE_SEND_ASK_FILE



if test -f "$FORCE_SEND_ASK_FILE"; then
	FORCE_SEND_ASK=$(cat $FORCE_SEND_ASK_FILE)
fi

actual_year=$(date +%Y)
actual_month=$(date +%m)

if ! [ -d $HOME/$nameBureau/$nameProject/ATTACHMENTS/$actual_year ]; then
    mkdir $HOME/$nameBureau/$nameProject/ATTACHMENTS/$actual_year
    if ! [ -d $HOME/$nameBureau/$nameProject/ATTACHMENTS/$actual_year/$actual_month ]; then
        mkdir $HOME/$nameBureau/$nameProject/ATTACHMENTS/$actual_year/$actual_month
    fi
fi

if test -f "$LAST_MONTH_FILE"; then
    last_month=$(cat $LAST_MONTH_FILE)
fi
echo $MESSAGE_BODY | msmtp -v $TO_EMAIL_ADDRESS --host=$SMTP_SERVER --port=$SMTP_PORT --auth=login --tls=on --user=$SMTP_USER --from=$FROM_EMAIL_ADDRESS --passwordeval="echo $SMTP_PASS" 

Hors ligne