端末の誤動作でメールを送信する

端末の誤動作でメールを送信する

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
  • 添付ファイルなし:$BODYEメール本文
  • 添付ファイルあり:メール本文が空です。

編集:@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-AATTACHMENTSATTACHMENTS="$ATTACHMENTS -A $attachment"$ATTACHMENTSmail

もちろん、正しい方法は配列を使用してコマンドライン引数を保持することですが、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その他用途に。したがって、動作しないことを再確認することをお勧めします。

おすすめ記事