Actions

From Claws Mail FAQ
Revision as of 17:21, 19 August 2021 by Wwp (talk | contribs) (→‎Examples)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Introduction

The "actions" feature is a convenient way for the user to launch external commands to process a complete message file including headers and body or just one of its parts. It allows also the use of an external command to filter the whole text or just a selected part in the message window or in the compose window. This is a generic tool that allows to do any uncommon actions on the messages, and thus extends the possibilities of Claws Mail.

Usage

To create a new action, go to Configuration -> Actions.... The "Actions setting" dialog offers to enter the Menu name that will trigger the command. The created menu will be found in the Tools -> Actions submenu. By inserting a slash / in the menu name, you create a submenu.

The command is entered in the Command line entry. Note that Claws Mail stores every single email in a separate file. This allows to use the following syntax for the command :

  • %f denotes the file name of the selected message. If you selected more than one, then the command will be launched for each message with the appropriate file name;
  • %F denotes the list of the file names of the selected message. If only one message is selected, this amounts to %f, but if more messages are selected, then the command will be launched only once with the list of the file names. (You can use both %f and %F in one command: then the command will be launched for each selected message with the name of this message and with the list of all selected messages. I did not find a practical example for this.);
  • %p denotes the current selected message part of a multipart message. The part is decoded accordingly. If the message is not a multipart message, it denotes the message body
  • Prepending >: this will allow you to send to the command's standard input a text that you will enter in a dialog window
  • Prepending *: this will allow you to send to the command's standard input a text that you will enter in a dialog window. But in contrast to prepending >, the entered text is hidden (useful when entering passwords)
  • Appending an ampersand &: this will run the command asynchronously. That means "fire and forget". Claws Mail won't wait for the command to finish, nor will it catch its output or its error messages
  • Prepending the vertical bar | (pipe-in): this will send the current displayed text or the current selected text from the message view or the compose window to the command standard input. The command will silently fail if more than one message is selected
  • Appending the vertical bar | (pipe-out): this will replace the current displayed text or the current selected text from the message window or the compose window with the command standard output. The command will silently fail if more than one message is selected
  • Appending the "greater than" sign > will insert the command output in the message. The difference between the trailing | is that no text will be deleted or replaced. Most used when composing mails to insert text. Only available since 0.8.6claws66*

Note: It is not possible to use actions containing %f, %F or %p from the compose window.

When a command is run, and unless it is run asynchronously, Claws Mail will be insensitive to any interaction and it will wait for the command to finish. If the command takes too long (5 seconds), it will popup a dialog window allowing to stop it. This dialog will also be displayed as soon as the command has some output: error messages or even its standard output when the command is not a "pipe-out" command. When multiple commands are being run, they are run in parallel and each command output is separated from the outputs of the others.

Examples

Here are some examples that are listed in the same syntax as used for storing the actions list. You can copy and paste the definition in your ~/.claws-mail/actionsrc file (exit Claws Mail before). The syntax is very simple: one line per action, each action contains the menu name and the command line separated by a colon and a space ": ". Alternatively, you can use Configuration -> Actions... and for each example enter a menu name and copy&paste the text after the colon and space ": " in the command definition.

Purpose Menu Name: Command Line Details
rot13 cyphering Rot13: |tr a-zA-Z n-za-mN-ZA-M| This will apply the rot13 cyphering algorithm to the (selected) text in the message/compose view.
Decoding uuencoded messages UUdeview: xdeview %F& xdeview comes with uudeview. If an encoded file is split in multiple messages, just select them all and run the command.
Display uuencoded image Display uuencoded: uudec %f& Displays uuencoded files. The uudec script can be found here.
Opening uuencoded document with OpenOffice Open uuencoded with OpenOffice: uuooffice %f& Opens uuencoded file with OpenOffice. The uuooffice script can be found here.
Save attachments Save attachments: munpack -C ~ -- %F Select one or several mails then use the action. The attachments will be saved to your home folder, you can replace ~ by another directory provided you create it first. munpack is provided by the mpack package in debian.
Save MS TNEF parts Save TNEF part: xterm -e tnef-claws %p Select the TNEF message part then use this action to extract the attachment.
Alter messages Edit message: gvim -f "%F" Allows to edit any received message. Can be used to remove unneeded message parts etc.
Pretty format Format/Par: |par 72Tbgjqw74bEe B=._A_a 72bgi|

Format/Fmt: |fmt -s -w 75|

Par: http://www.nicemice.net/par/ is an utility that can pretty format any text. It does a very good job in indenting quoted messages, and justify text. Used when reading or composing a message.

Fmt: part of the the GNU core utilities

Browse Part/Dillo: dillo %p& Browse the selected message part in Dillo.
Receive key from server via PGP/MIME signature GnuPG/Receive Key from PGP/MIME sig: ID=`gpg --verify %p /dev/null 2>&1|grep "key ID"|tr -d "[:space:]"|tail -c8`;echo "==== Fetching $ID ===="; gpg --no-tty --keyserver wwwkeys.nl.pgp.net --recv-keys $ID Select the signature part of a message then call this action to fetch the key from wwwkeys.nl.pgp.net
Receive key from server via signed unencrypted inline message GnuPG/Receive Key from Signed Inline Message: ID=`gpg --verify %p 3>&1 1>&2 2>&3 |grep "key ID"|tr -d "[:space:]"|tail -c8`;echo "==== Fetching $ID ===="; gpg --no-tty --keyserver wwwkeys.nl.pgp.net --recv-keys $ID No need to mouse-select the message, just use the action.
Receive key from ID in message GnuPG/Receive Key From ID in Message | gpg --recv-keys Useful when only the desired key ID is in the message. Just select the ID and call the action.
Receive key from URL in message GnuPG/Receive Key from URL in message | wget -i - -O - | gpg --import Select the URL where the public key is then import it with this action.
Display encryption keys of a message GnuPG/Display encryptions keys of message | cat %p | gpg --batch --decrypt --list-only --status-fd 1 2>/dev/null | awk '/^\[GNUPG:\] ENC_TO / { print $3 }' | while read keyid; do echo "$keyid"; gpg --list-keys "$keyid"; echo; done Shows the key ids, that were used for encrypting the message. Additionally the corresponding keys from the keyring are displayed.
Import key from mail GnuPG/Import Key From Mail: gpg --import %p Select the message part where the public key is then import it with this action.
Insert public key in message GnuPG/Insert My Public Key: gpg --export -a MYKEYID> Insert your public key in the message your are composing. Replace MYKEYID with your key id. Needs 0.8.6claws66 or newer
Reporting SPAM Report as SPAM: spamassassin -r < %f Use spamassassin to report mail as spam. Redirection (<) is possible only with version 0.7.7.
Check spelling Check spelling: |T=`mktemp $HOME/.sXXXXXX`; cat - > $T;xterm -e ispell $T;cat $T;rm $T| Open a terminal and check the spelling with ispell
Search Google for selected text Search Google: |google_search.pl Search google for the selected text. Needs the google_search.pl script.
Search any searchable website for the selected text Search: |multiwebsearch.pl --where="%u" --what="%s" Search any searchable website for the selected text. Needs the multiwebsearch.pl script.
Google for message id Google Msg ID: |google_msgid.pl Search google for the selected message ID. Needs the google_msgid.pl script. Edit the script to change the browser (default is mozilla).
Pipe a header value to a script Get Subject: grep "^Subject:\ " %f | cut -d\ -f 2-| script.sh Pipe the Subject: header value of selected message to script.sh
Fix missing date Fix date: fix_date.sh %F Add a 'Date:' header in the selected email(s) when such header is missing. Needs the fix_date.sh script.

The correct date is guessed from other headers that contain timestamp information or from the file or system date as a fallback. The order or preference for the date value replacement can be changed by editing the script. This script can be used to fix messages that show non RFC-compliant Date headers as well. X-Original-Date is always added too, to keep track of the original value if any. Date: and X-Original-Date: headers are not overwritten unless you use the --force switch.

Change subject line

Remove [something]: echo %F | xargs -n 1 remove-deprecated-list.sh

I needed to remove [something] from some mailing list posts:

#!/bin/bash
# $1 - file name
# preserve mtime
mtime=`stat -t -c "%y" "$1" | sed -e "s/[- ]//g" -e "s/://" -e "s/:/./" | cut -b 1-15`
echo Filtering file: "$1"
# filter with sed
sed -ie "s/^Subject: \(.*\)\[something\] /Subject: \1/" "$1"
# restore mtime
touch -m -t "$mtime" "$1"
The uudec script can be found here (uudec). It needs uudecode and Image Magick's display. The latter can be replaced by any image viewer that can get input from standard input. The script could also be modified to use temporary files instead of standard input.
The uuooffice script can be found here (uuooffice). It needs uudecode and OpenOffice. The latter can be replaced by any document viewer/editor. The script creates a temporary file (/tmp/uuooffice-<docname>) and deletes it after you close OpenOffice.
The tnef-claws bash script was written by Shawn Lamson and is to be found here. The script is well commented. You need to have the tnef package already installed.
Important Note for Windows users: Some of these actions require standard Unix tools, hence may not work on Win32/64 systems out of the box. You probably want to install CygWin first to provide a similar environment or, where available, enable the “Subsystem for UNIX-based Applications” on your system.