Gmail 経由で端末からメールを送信するためにウェブ上で作成したスクリプトがあります。
#!/bin/bash
#sendGmail "FROM" "TO" "SUBJECT" "BODY" "ATTACHMENTS (optional)"
FROM=$1
TO=$2
SUBJECT=$3
BODY=$4
# Function to check if entered file names are really files
function check_files()
{
output_files=""
for file in $1; do
if [ -s $file ]; then
output_files="${output_files}${file} "
fi
done
echo $output_files
}
if [ "$FROM" == "" ]; then
FROM="[email protected]"
else
if [[ "$FROM" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]]; then
echo error in FROM
exit
fi
fi
if [[ "$TO" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]]; then
echo error in TO
exit
fi
if [ -z "$5" ]; then
echo $BODY | mail -r $FROM -s $SUBJECT $TO
else
ATT=$5
ATTACHMENTS=""
attachments=$(check_files "$ATT")
for attachment in $attachments; do
ATTACHMENTS="$ATTACHMENTS $attachment"
done
echo $ATTACHMENTS
echo $BODY | mail -r $FROM -s $SUBJECT -A $ATTACHMENTS $TO
fi
echo email sent!
ただし、電子メールを送信すると、次の動作が発生します。
- 添付ファイルの有無:「任意の件名」の場合、Eメールはおよびに
$subject
送信されます。$TO
[email protected]
[email protected]
theme@ mipc.localdomain
- 添付ファイルなし:
$BODY
Eメール本文 - 添付ファイルあり:メール本文が空です。
編集:@ilkkachuのおかげで、最初の問題が解決されました。新しいコード:
#!/bin/bash
#sendGmail "FROM" "TO" "SUBJECT" "BODY" "ATTACHMENTS (optional)"
FROM=$1
TO=$2
SUBJECT=$3
BODY=$4
if [ "$FROM" == "" ]; then
FROM="[email protected]"
else
if [[ "$FROM" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]]; then
echo error in FROM
exit
fi
fi
if [[ "$TO" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" ]]; then
echo error in TO
exit
fi
if [ -z "$5" ]; then
echo "$BODY" | mail -r "$FROM" -s "$SUBJECT" "$TO"
else
ATT=$5
ATTACHMENTS=""
for attachment in $ATT; do
if [ -f $attachment ]; then
ATTACHMENTS="$ATTACHMENTS-A $attachment "
else
echo something wrong with $attachment, therefore not attached
fi
done
echo "$BODY" | mail -r "$FROM" -s "$SUBJECT" $ATTACHMENTS "$TO"
fi
echo email sent!
答え1
その理由は噴射。SUBJECT
含まれている場合とsome random theme
同じmail -s $SUBJECT
ですmail -s some random theme
。内容は余白に$subject
単語に分割されています。引用符を使用する必要がありますmail -s "$SUBJECT"
。
添付ファイルに関しては、各ファイルのオプションを追加する必要があるため、代わりに必要になる場合があり-A
ます。ファイル名にスペースが含まれていない場合は、次のように各ファイル名に追加することができます。オプションとファイル名を分離する必要があるため、ここでは引用符は必要ありません。-A file1 file2
-A file1 -A file2
-A
ATTACHMENTS
ATTACHMENTS="$ATTACHMENTS -A $attachment"
$ATTACHMENTS
mail
もちろん、正しい方法は配列を使用してコマンドライン引数を保持することですが、for
ループはすでに添付ファイルにトークン化を引き起こすため、配列は役に立ちません。
だから:
for f in files... ; do
ATTACHMENTS="-A $f"
done
echo "$BODY" | mail -r "$FROM" -s "$SUBJECT" $ATTACHMENTS "$TO"
また、添付ファイルを受け取るものが何であるかを確認したとしますmail
。-A
多くのバージョンがありますが、mail
このオプションについて知っている人はいません。例えば、マニュアルページはdie.netにあります。アクセサリー用-a
、-A
その他用途に。したがって、動作しないことを再確認することをお勧めします。