mailx
電子メールを使用または変換するときに電子メールに受信者を追加するオプションは何ですか?私が知っていることは:
- メールアドレスをメモリ内の文字で手動で入力してください。
.mailrc
以前に保存したエイリアスを入力してください
カーソルキーを使用してナビゲートしたり、オートコンプリートで絞り込むことができる、以前に電子メールで送信した電子メールアドレスから生成された連絡先などの他のオプションはありますか?
答え1
Forthrin、私はこの問題を解決するエレガントな方法を見つけることができません。しかし、私はいくつかの考えをしており、考えられる解決策は次のとおりです。
「recipients」というディレクトリを作成し、送信したい電子メールアドレスの名前を付けたダミーファイルを作成し、このディレクトリでオートコンプリートを使用します。
mkdir recipients
cd recipients
touch [email protected]
mail -s "stuff" '[email protected]' < logfile.txt
ここで一重引用符は、「\」の発生をエスケープするのを防ぐのに役立ちます。
あまり良くないことはわかりますが、電子メールアドレスのテキストファイルから抽出し、そのようにオートコンプリート機能をまとめてこれを行うことができます。しかし、どうすればいいのかわかりません。私よりスマートな人が割り込むことができます。
また、以前の履歴とメールログを検索して送信したメッセージを表示し、そのアドレスを取得して受信者フォルダに配置することもできます。これで受信者フォルダがあるので、タブ補完を使用できるようになります(自動補完要求について)。
これは最善の解決策ではありませんが、mailxに連絡先機能は表示されません。
答え2
1つの解決策は、ラッパーを使用してアドレスを保存し、bash補完を使用して検索することです。
address_book=${HOME}/.address
mailx() {
#loop through all args
for i; do
# does this look like an email address
if grep -xqE '[[:alnum:]_.+\-]+@[[:alnum:]\-]+.[[:alnum:].\-]+' <<< "${i}" && ! grep -xqF "${i}" "${address_book}"; then
echo "${i}" >> "${address_book}"
fi
done
/usr/bin/mailx "${@}"
}
_mailx_completion() {
if [[ ! -f ${address_book} ]] ; then
return
fi
# Only add each email once
emails=($(grep -xvf<(echo "${COMP_WORDS[*]}"|tr ' ' '\n') "${address_book}"))
if [[ ${#emails[@]} -eq 0 ]] ; then
return
fi
# list emails
COMPREPLY=( $(compgen -W "${emails[*]}" "${COMP_WORDS[${COMP_CWORD}]}") )
}
complete -F _mailx_completion mailx
".bashrc"に追加してください。
説明する:
ペアを傍受するためにbash関数を使用しますmailx
。この関数は、電子メールアドレスのコマンドライン引数を取得します。見つかったら、アドレス帳を確認して、すでに存在するかどうかを確認します。それ以外の場合はリストに追加します。最後に、mailx
元のパラメータを使用して呼び出します。
2番目の部分はbashオートコンプリート機能です。Tabこの機能はキーを押すたびに呼び出されます。~/.address
Bashはを入力した後、Tabキーを押すたびにEメールアドレスを読み取りますmailx
。追加のロジックは、コマンドラインに追加した後に提案リストから電子メールアドレスを削除することです。
この機能をすべて有効にするには、上記の内容を.bashrc
ファイルに追加してください。