- 1 Code source sur GitHub
- 2 Préambule
-
3
Utilisation
-
3.1
Options et vérifications
- 3.1.1 Confirmation de l’expéditeur
- 3.1.2 Choix du destinataire dans une liste prédéfinie
- 3.1.3 Saisie en direct d’un nouveau destinataire
- 3.1.4 Modification du corps du mail par défaut
- 3.1.5 Une dernière confirmation !
- 3.1.6 Erreur d’exécution de la commande mail
- 3.1.7 Confirmation d’exécution de la commande
- 3.1.8 Support des envois multiples
-
3.1
Options et vérifications
- 4 Code du script
Code source sur GitHub
https://github.com/Germain-Italic/stuff/blob/main/Germain-Italic/context-menu-mail-file.sh
Préambule
Ce script requiert une installation fonctionnelle de Postfix.
Lire cet article pour une configuration rapide : https://www.germain.lol/relais-stmp-mandrill-via-postfix/
Utilisation
Clic droit sur un fichier dans Nautilus.
Vous pouvez renommer le script comme bon vous semble (même sans .sh
à la fin) mais n’oubliez pas de le rendre exécutable.
Options et vérifications
Confirmation de l’expéditeur
Choix du destinataire dans une liste prédéfinie
Pour changer la liste des destinataires prédéfinis, modifiez le script à la ligne 54 :
"recipient1@domain.com" \
"recipient2@domain.com" \
"recipient3@domain.com" \
Saisie en direct d’un nouveau destinataire
Modification du corps du mail par défaut
Il faut utiliser \n
pour faire des sauts de ligne car Zenity ne gère pas les textbox multi-lignes.
Une dernière confirmation !
Erreur d’exécution de la commande mail
Notification si un problème survient :
Confirmation d’exécution de la commande
Support des envois multiples
On ne peut pas envoyer plusieurs PJ dans un seul mail, mais on peut envoyer plusieurs mails d’un coup. Il suffit de sélectionner plusieurs fichiers dans Nautilus :
Code du script
Testé uniquement sur Pop_OS 21.04…
N’oubliez pas d’installer les dépendances : zenity (déjà installé par défaut) et postfix.
~/.local/share/nautilus/scripts/mail-file.sh
#!/bin/bash
# save this script to ~/.local/share/nautilus/scripts/mail-file.sh
# then chmod +x ~/.local/share/nautilus/scripts/mail-file.sh
# the companion blog post:
# https://www.germain.lol/gnome-menu-contextuel-pour-envoyer-un-fichier-par-mail/
# some references that helped me:
# https://help.ubuntu.com/community/NautilusScriptsHowto
# https://help.ubuntu.com/community/NautilusScriptsHowto/SampleScripts
# https://help.gnome.org/users/zenity/3.32/
# https://renenyffenegger.ch/notes/Linux/shell/commands/zenity
# https://mailutils.org/manual/html_section/index.html
# https://stackoverflow.com/questions/2138701/checking-correctness-of-an-email-address-with-a-regular-expression-in-bash
# DEBUG: show all variables sent by Nautilus
# zenity --info --text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $NAUTILUS_SCRIPT_SELECTED_URIS $NAUTILUS_SCRIPT_CURRENT_URI $NAUTILUS_SCRIPT_WINDOW_GEOMETRY"
# DEBUG: force filename and path
# NAUTILUS_SCRIPT_SELECTED_FILE_PATHS='/home/germain/Téléchargements/invoice-4214667.pdf'
# required dependency:
# sudo apt-get install zenity
ZENITY='/usr/bin/zenity'
ZENITY_PROGRESS_OPTIONS='--auto-close --auto-kill' #you can remove this if you like
ZENITY_MSG_WIDTH='--width=300'
# required dependency:
# sudo apt-get install postfix libsasl2-modules mailutils
# Postfix config available at https://www.germain.lol/relais-stmp-mandrill-via-postfix/
MAIL='/usr/bin/mail'
REGEXMAIL="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"
SENDER="sender@domain.com"
SENDER_CONFIRMED=$($ZENITY --entry --title="Confirm sender" --text="Who are you?" --entry-text="$SENDER" $ZENITY_MSG_WIDTH)
if [[ ! $SENDER_CONFIRMED =~ $REGEXMAIL ]] ; then
$ZENITY --error --text="Error: $SENDER_CONFIRMED looks invalid." $ZENITY_MSG_WIDTH
exit 0
fi
# add one recipient per line below
RECIPIENT_CONFIRMED=$($ZENITY --list \
--editable \
--title="Recipient" \
--text="Select a recipient:" \
--column="Recipient" \
"recipient1@domain.com" \
"recipient2@domain.com" \
"recipient3@domain.com" \
"Custom (double click to edit)" \
)
if [[ ! $RECIPIENT_CONFIRMED =~ $REGEXMAIL ]] ; then
$ZENITY --error --text="Error: $RECIPIENT_CONFIRMED looks invalid." $ZENITY_MSG_WIDTH
exit 0
fi
MSG="Hello,\nPlease find attached file.\nBest regards."
MSG_CONFIRMED=$($ZENITY --entry --title="Confirm message" --text='Email body\n(Hint: use \\n for linebreaks):' --entry-text="$MSG" $ZENITY_MSG_WIDTH)
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read FILENAME; do
if [ -n "${FILENAME}" ]
then
REALNAME=`basename "$FILENAME"`
if $($ZENITY --question --title="Confirm file" --text="Send $REALNAME?" $ZENITY_MSG_WIDTH)
then
OUTPUT=$($MAIL -s "$SENDER_CONFIRMED sent you $REALNAME" -a "From:$SENDER_CONFIRMED" $RECIPIENT_CONFIRMED -A "$FILENAME" <<< $(echo -e $MSG_CONFIRMED) 2>&1 1>/dev/null)
if [ -z "$OUTPUT" ]
then
$ZENITY --info --text="Success! $REALNAME sent to $RECIPIENT_CONFIRMED" $ZENITY_MSG_WIDTH
else
$ZENITY --error --text="Error: $REALNAME could not be sent.\n$OUTPUT" $ZENITY_MSG_WIDTH
fi
fi
fi
done