Bonjour.
Une chose qui personnellement me manquait beaucoup depuis que j'ai quitté Windows est de pouvoir
attacher des fichiers (réduits si ce sont des jpg) à un mail
et les envoyer avec mon mailer habituel
Thunderbird directement depuis mon navigateur de fichier usuel
Nautilus (qui dispose de cette fonction mais uniquement via Evolution). J'ai cherché sur le forum, j'ai trouvé des scripts
ici (d'un auteur inconnu) et
là (mathieu vilaplana). J'ai pris alors mon courage à deux mains et fait un mix de tout ça à ma sauce personnelle. Je vous livre le résultat qui en principe répond aux caractéristiques suivantes :
- permet d'attacher des fichiers et/ou des images par clic droit sur une sélection de fichiers (propose le redimensionnement s'il y a des images);
- fonctionne avec des noms de fichiers/répertoires un peu bizarres (pas trop quand même), pas de problème avec les espaces en particulier;
- pas de problème non plus pour des envois depuis le bureau;
- fonctionne que Thunderbird soit lancé ou non.
Si ce script vous est utile en quelque chose, n'hésitez pas à le dire ici ça me fera plaisir 🙂
Installation
1. Taper dans un terminal :
gedit ~/.gnome2/nautilus-scripts/"Envoyer par mail"
2. Coller le script suivant :
#!/bin/bash
# Date : 19/10/2005
#
# Attention : les packages zenity et imagemagick doivent etre installes au prealable
#
# On verifie tout d'abord qu'il y a bien au moins un fichier selectionne
if [ $# -eq 0 ]; then
zenity --warning --title="Attention" --text="Il faut sélectionner au moins un fichier !"
exit 1
fi
# On memorise le nombre de fichiers a envoyer
NB_FILES=$#
# On ecrase une eventuelle precedente liste de fichiers attaches
echo "" > /tmp/attachment.log
# On passe en revue la liste des fichiers a envoyer
(while [ $# -gt 0 ];
do
# Pour chaque fichier on memorise son nom et son uri
FILE_NAME="$1"
FILE_URI="$NAUTILUS_SCRIPT_CURRENT_URI/$FILE_NAME"
# On passe les infos a la fenetre de progression
let "COMPTEUR += 1"
echo "# Traitement du fichier $FILE_NAME ($COMPTEUR/$NB_FILES) ..."
let "PROGRESS = COMPTEUR*100/NB_FILES"
echo $PROGRESS
# On teste si le fichier est une image
# Remarque : bizarrement, la ligne suivante ne marche pas si l'image est sur le bureau ...
# IS_IMAGE=`file -bi "$FILE_NAME" | grep -c image`
# On procede donc differemment ...
# La ligne suivante est eventuellement a adapter pour prendre en compte d'autres
# types de fichier image. Ici on ne reduit que les .jpg
# Par exemple si on veut reduire les .jpg, les .gif et les .png on peut ecrire
# IS_IMAGE=`echo $FILE_NAME | grep -c -E [.]jpg\|[.]gif\|[.]png`
IS_IMAGE=`echo $FILE_NAME | grep -c -E [.]jpg`
if [ $IS_IMAGE != 0 ]; then
# Si c'est une image on demande une fois (pour toutes) la definition souhaitee
# pour cette image (et les eventuelles autres)
if [ ! $DEF_ASKED ]; then
# On attend un peu pour que la fenêtre n'arrive pas avant la fenetre de progression ...
sleep 2
DEF=`zenity --list --title "Redimensionner l'(es) image(s) ..." --text="Choisir une définition maximum ci-dessous
(ou cliquer sur Annuler pour envoyer les images sans modification)" --radiolist --column "" --column "Taille" FALSE 1280x1024 TRUE 1024x768 FALSE 800x600 FALSE 640x480`
MAX_DEF=`echo "$DEF" | awk -F'x' '{ print $1 }'`
DEF="${MAX_DEF}x${MAX_DEF}"
DEF_ASKED=1
fi
if [ "$DEF" != "x" ]; then
# Si une definition a ete specifiee, on va contruire
# une copie de l'image (reduite) dans la corbeille
# Bizarrement, la ligne suivante ne marche pas toujours si l'image est sur le bureau
# convert "$FILE_NAME" -resize $DEF "$HOME/.Trash/$FILE_NAME"
# On fait donc quelque chose de plus complique ...
WORKDIR="$(echo $NAUTILUS_SCRIPT_CURRENT_URI | sed ' s/file:\/\///g
s/%20/\ /g
s/%23/\#/g
s/%24/\$/g
s/%25/\%/g
s/%35/\?/g
s/%3B/\;/g
s/%3C/\</g
s/%3E/\>/g
s/%40/\@/g
s/%5B/\[/g
s/%26/\&/g
s/%2C/\,/g
s/%5E/\^/g
s/%5D/\]/g
s/%60/\`/g
s/%7B/\{/g
s/%7C/\|/g
s/%7D/\}/g
s/%C3%A9/\é/g
s/%C3%B9/\ù/g
s/%C3%A8/\è/g
s/%C3%A7/\ç/g
s/%C3%A0/\à/g')"
convert "$WORKDIR/$FILE_NAME" -scale $DEF "$HOME/.Trash/$FILE_NAME"
# On memorise l'uri de l'image reduite a la place de celle de l'image d'origine
FILE_URI="file://$HOME/.Trash/$FILE_NAME"
fi
fi
# On rajoute l'uri du fichier a la liste
if [ "$ATTACHMENT" == "" ]; then
ATTACHMENT=$FILE_URI
else
ATTACHMENT=$ATTACHMENT,$FILE_URI
fi
# On enregistre la liste provisoire des fichiers
echo $ATTACHMENT > /tmp/attachment.log
# Et on passe au fichier suivant ...
shift
done) | zenity --progress --auto-close --title="Préparation" --text="Traitement en cours ..." --percentage=0
# On recupere la liste des fichiers et on rajoute des quotes autour
ATTACHMENT=`cat /tmp/attachment.log`
ATTACHMENT=\'$ATTACHMENT\'
# On teste si Thunderbird est lance pour choisir
# la bonne façon de joindre les fichiers
MOZ_ON=`ps -ec | grep -c mozilla-thunder`
if [ $MOZ_ON != 0 ]; then
/usr/lib/mozilla-thunderbird/mozilla-thunderbird-xremote-client "xfeDoCommand(composeMessage,attachment=$ATTACHMENT)"
else
mozilla-thunderbird -compose "attachment=$ATTACHMENT"
fi
3. Sauver puis rendre le fichier exécutable :
chmod +x ~/.gnome2/nautilus-scripts/"Envoyer par mail"
Utilisation
Sélectionner des fichiers, clic droit puis Scripts > Envoyer par mail.
Màj : version pour Ubuntu 6.04 Dapper Drake
La version précédente du script ne marche pas avec Thunderbird 1.5. Utiliser alors celle-ci :
#!/bin/bash
# Author : Eddy
# Date : 2006/03/09
#
# Warning : thunderbird version >= 1.5, zenity and imagemagick packages must be installed
#
# Default language = English
_warning_title="Warning"
_warning_text="Please select at least one file !"
_progress_title="Preparing"
_progress_first_text="Processing ..."
_progress_text="Processing file"
_prompt_title="Scale image(s) ..."
_prompt_text="Choose the desired definition
(or Cancel to send pictures unmodified)"
_prompt_column_title="Size"
case $LANG in
# If language = French
fr* )
_warning_title="Attention"
_warning_text="Il faut sélectionner au moins un fichier !"
_progress_title="Préparation"
_progress_first_text="Traitement en cours ..."
_progress_text="Traitement du fichier"
_prompt_title="Redimensionner l'(es) image(s) ..."
_prompt_text="Choisir une définition maximum ci-dessous
(ou cliquer sur Annuler pour envoyer les images sans modification)"
_prompt_column_title="Taille"
esac
# First we make sure there's something selected.
if [ $# -eq 0 ]; then
zenity --warning --title="$_warning_title" --text="$_warning_text"
exit 1
fi
# Store the number of files to process.
NB_FILES=$#
# Reset the attachment list.
echo "" > /tmp/attachment.log
(while [ $# -gt 0 ];
do
# Store the file name and uri.
FILE_NAME="$1"
FILE_URI="$NAUTILUS_SCRIPT_CURRENT_URI/$FILE_NAME"
let "COMPTEUR += 1"
echo "# $_progress_text $FILE_NAME ($COMPTEUR/$NB_FILES) ..."
let "PROGRESS = COMPTEUR*100/NB_FILES"
echo $PROGRESS
# Test if the file is a picture.
# The following line may not work if the file is on the desktop ...
# IS_IMAGE=`file -bi "$FILE_NAME" | grep -c image`
# so we do differently.
# Here we reduce only jpeg files.
# If we wanted to reduce other types of picture file then we could do something like that :
# IS_IMAGE=`echo $FILE_NAME | grep -c -E [.]jpg\|[.]gif\|[.]png`
IS_IMAGE=`echo $FILE_NAME | grep -c -E [.]jpg`
if [ $IS_IMAGE != 0 ]; then
# If the file is an image, prompt for reducing it.
if [ ! $DEF_ASKED ]; then
# Wait a little so that the window does not appear under the progress window ...
sleep 2
DEF=`zenity --list --title "$_prompt_title" --text="$_prompt_text" --radiolist --column "" --column $_prompt_column_title FALSE 1280x1024 TRUE 1024x768 FALSE 800x600 FALSE 640x480`
MAX_DEF=`echo "$DEF" | awk -F 'x' '{ print $1 }'`
DEF="${MAX_DEF}x${MAX_DEF}"
DEF_ASKED=1
fi
if [ "$DEF" != "x" ]; then
# Build a reduced copy of the file in the trash.
# The following line may not work if the file is on the desktop.
# convert "$FILE_NAME" -resize $DEF "$HOME/.Trash/$FILE_NAME"
# so we do something quite more complicated ...
WORKDIR="$(echo $NAUTILUS_SCRIPT_CURRENT_URI | sed ' s/file:\/\///g
s/%20/\ /g
s/%23/\#/g
s/%24/\$/g
s/%25/\%/g
s/%35/\?/g
s/%3B/\;/g
s/%3C/\</g
s/%3E/\>/g
s/%40/\@/g
s/%5B/\[/g
s/%26/\&/g
s/%2C/\,/g
s/%5E/\^/g
s/%5D/\]/g
s/%60/\`/g
s/%7B/\{/g
s/%7C/\|/g
s/%7D/\}/g
s/%C3%A9/\é/g
s/%C3%B9/\ù/g
s/%C3%A8/\è/g
s/%C3%A7/\ç/g
s/%C3%A0/\à/g')"
convert "$WORKDIR/$FILE_NAME" -scale $DEF "$HOME/.Trash/$FILE_NAME"
# Store the reduced file uri in place of the file uri.
FILE_URI="file://$HOME/.Trash/$FILE_NAME"
fi
fi
# Add the file uri to the list.
if [ "$ATTACHMENT" == "" ]; then
ATTACHMENT=$FILE_URI
else
ATTACHMENT=$ATTACHMENT,$FILE_URI
fi
# Store the attachement list into a text file
echo $ATTACHMENT > /tmp/attachment.log
# And continue with the next file ...
shift
done) | zenity --progress --auto-close --title="$_progress_title" --text="$_progress_first_text" --percentage=0
# Quotes are required for the attachment list
ATTACHMENT=`cat /tmp/attachment.log`
ATTACHMENT=\'$ATTACHMENT\'
# Test if Thunderbird is running to make properly the attachment.
MOZ_ON=`ps -ec | grep -c mozilla-thunder`
if [ $MOZ_ON != 0 ]; then
/usr/lib/mozilla-thunderbird/mozilla-xremote-client -a mozilla-thunderbird "xfeDoCommand(composeMessage,attachment=$ATTACHMENT)"
else
# Unfortunately this line doesn't work anymore with thunderbird version >= 1.5
#mozilla-thunderbird -compose "attachment=$ATTACHMENT"
mozilla-thunderbird &
sleep 3
/usr/lib/mozilla-thunderbird/mozilla-xremote-client -a mozilla-thunderbird "xfeDoCommand(composeMessage,attachment=$ATTACHMENT)"
fi