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!
하지만 이메일을 보내면 다음과 같은 동작이 발생합니다.
- 첨부 파일 유무: "임의의 제목"인 경우 이메일 은 및 으로
$subject
전송됩니다 .$TO
[email protected]
[email protected]
theme@ mipc.localdomain
- 첨부 파일 없음:
$BODY
이메일 본문 - 첨부 파일 있음: 이메일 본문이 비어 있습니다.
편집: @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
기타 용도로. 따라서 작동하지 않는지 다시 확인하는 것이 좋습니다.