아래 코드/명령 줄은 Unix 터미널에서 실행하면 예상대로 작동하지만 스크립트에 포함하고 스크립트를 실행하면 작동하지 않습니다. 정확히 동일합니다.
X-Priority가 Outlook에서 메일을 높은 우선 순위로 표시할 것으로 기대합니다. 명령줄에서 실행하면 이메일이 높은 우선순위로 올바르게 표시되고 파일이 첨부되고 본문이 예상대로 나타나는 것을 볼 수 있습니다. 그러나 쉘 스크립트를 작성하고 스크립트를 실행하면 메일이 텍스트로 포맷되어 이메일 본문에 첨부 파일이 추가되고 Outlook에서는 이메일이 정상적으로 표시됩니다.
내가 뭘 잘못하고 있는지 잘 모르겠습니다. 도움을 주시면 감사하겠습니다.
쉘 스크립트
#!/bin/sh
echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"
Shell Script로도 테스트됨
#!/bin/bash
echo "Message Body" | /usr/bin/mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"
명령줄
echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"
편집: 추가 R&D에 대한 자세한 내용/관찰:
Subject에는 실제 명령에 MyApp : ${HostName} : Restarted\nX-Priority: 1
.
HostName
내가 스크립트에 정의한 변수입니다. 와 같이 하드 코딩된 변수 값을 바꾸면 MyApp : myserver : Restarted\nX-Priority: 1
명령줄과 스크립트가 정확히 동일하게 작동합니다. 명령줄에 변수를 유지하면 예상대로 작동하지만(X-Priority 부분) MyApp : : Restarted
변수가 정의되지 않았기 때문에 제목이 예상대로 표시됩니다.
스크립트에 정의되지 않은 변수를 추가하려고 했지만 여전히 작동하지 않았습니다.
이것이 문제에 대한 더 많은 통찰력을 제공하기를 바랍니다.
참고: 저는 원래 stackoverflow에서 이 질문을 했습니다. 하지만 대신 여기에 물어보는 것이 좋습니다.https://stackoverflow.com/questions/75585298/mail-not-working-in-script-same-way-it-is-working-from-command-line
--
답변1
어떤 OS/Distro를 사용하고 있나요?
mailx
많은 배포판에서는 일반적으로 명령 에 대한 별칭으로 BSD를 사용 mail
하지만 대체 방법이 있거나 스크립트가 실행될 때 다른 PATH가 있으므로 예상한 프로그램과 다른 프로그램을 사용합니다. (아마도 귀하의 OS에는 mail
사용자가 수행해야 할 작업에 대한 다른 아이디어가 있을 수 있습니다.)
터미널에서 시도해 보세요:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
그런 다음 스크립트에서 동일하게 PATHS에 대해 다른 점이 있는지 확인하십시오.
BSD는 mailx
다음과 같은 곳에 있을 것입니다./usr/bin/mailx
mail
하지만 사용하는 명령 에 따라 다른 옵션이 있는 것 같습니다 . (보다 man mailx
/ man mail
). 다음을 얻으려고 하시나요?
Subject: Message Subject
X-Priority: 1
또는 제목과 추가 헤더:
Subject: Message Subject
X-Priority: 1
bash
다른 명령을 호출하기 위해 변수를 사용하려고 하면 변수에서 개행 문자를 제거합니다.
다음과 같은 경우 mailx
:
- -ㅏ지정하다추가 헤더 필드"X-Loop: foo@bar" 등과 같은 명령줄에서
나는 다음과 같은 것을 시도해 볼 것입니다 :
#!/bin/bash
echo "Message Body" | /usr/bin/mailx -a "X-Priority: 1" -s "Message Subject" -r [email protected] -c [email protected] -- [email protected]
하지만 첨부 파일을 추가하기 위해 기본 메일/mailx를 얻는 (쉬운) 방법은 없다고 생각합니다. 할 수 있는 일이 아닙니다.
mutt
또는 다음과 같은 대안을 사용할 수 있습니다 neomutt
.
options:
-- Special argument forces NeoMutt to stop option parsing and treat
remaining arguments as addresses even if they start with a dash
-a <file> Attach one or more files to a message (must be the last option)
Add any addresses after the '--' argument
-c <address> Specify a carbon copy (Cc) recipient
-s <subject> Specify a subject (must be enclosed in quotes if it has spaces)
어쨌든 당신이 원하는 것과 더 비슷할 것 같습니다.
echo "Message Body" | mutt -s "Message Subject" \
-e "my_hdr X-Priority: 1" \
-e "my_hdr From: [email protected]" \
-c [email protected] \
-a /path/to/logFile.log \
-- [email protected]
echo "Message Body" | mutt -s "Message Subject" -e "my_hdr X-Priority: 1" -e "my_hdr From: [email protected]" -c [email protected] -a /path/to/logFile.log -- [email protected]