명령줄에서 작동하는 것과 같은 방식으로 '메일'이 스크립트에서 작동하지 않습니다.

명령줄에서 작동하는 것과 같은 방식으로 '메일'이 스크립트에서 작동하지 않습니다.

아래 코드/명령 줄은 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]

관련 정보