'Mail' funktioniert im Skript nicht auf die gleiche Weise wie in der Befehlszeile

'Mail' funktioniert im Skript nicht auf die gleiche Weise wie in der Befehlszeile

Die folgende Code-/Befehlszeile funktioniert wie erwartet, wenn ich sie von einem Unix-Terminal aus ausführe, aber nicht, wenn ich sie in ein Skript einfüge und das Skript ausführe – genau dasselbe.

Ich erwarte, dass X-Priority die E-Mail in Outlook als hochpriorisiert anzeigt. Wenn ich es über die Befehlszeile ausführe, wird die E-Mail korrekt als hochpriorisiert angezeigt, und ich sehe, dass die Datei angehängt ist und der Text wie vorgesehen aussieht. Wenn ich jedoch ein Shell-Skript schreibe und das Skript ausführe, wird die E-Mail als Text formatiert, und der Anhang wird an den Text der E-Mail angehängt. Die E-Mail wird in Outlook wie gewohnt angezeigt.

Ich bin mir nicht sicher, was ich falsch mache. Ich bin für jede Hilfe dankbar.

Shell-Skript

#!/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]"

Auch mit Shell Script getestet

#!/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]"

Befehlszeile

echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

EDIT: Weitere Details/Beobachtungen zu weiterer Forschung und Entwicklung:

In meinem eigentlichen Befehl gibt es im Betreff eine Variablenzuweisung wie MyApp : ${HostName} : Restarted\nX-Priority: 1. HostNameist eine Variable, die ich im Skript definiert habe. Wenn ich die Variable durch einen fest codierten Wert wie ersetze MyApp : myserver : Restarted\nX-Priority: 1, verhalten sich die Befehlszeile und das Skript genau gleich. Wenn ich die Variable in der Befehlszeile behalte, funktioniert sie wie erwartet (der X-Priority-Teil), aber der Betreff kommt wie MyApp : : Restartederwartet, da die Variable nicht definiert ist.

Ich habe versucht, dem Skript eine nicht definierte Variable hinzuzufügen, aber es hat immer noch nicht funktioniert.

Ich hoffe, dies gibt weitere Einblicke in das Problem.


Hinweis: Ich habe diese Frage ursprünglich in Stackoverflow gestellt. Mir wurde jedoch geraten, sie stattdessen hier zu stellen -https://stackoverflow.com/questions/75585298/mail-funktioniert-nicht-im-script-auf-die-gleiche-weise-funktioniert-es-von-der-befehlszeile-aus

--

Antwort1

Welches Betriebssystem/welche Distribution verwenden Sie?

Viele Distributionen verwenden BSD mailxals Alias ​​für den mailBefehl, aber es kann auch eine Alternative geben oder Ihr Skript hat beim Ausführen einen anderen PATH und verwendet daher ein anderes Programm als das erwartete. (Vielleicht hat Ihr Betriebssystem andere Vorstellungen davon, was mailBenutzer tun sollten.)

Versuchen Sie es von Ihrem Terminal aus:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Dann das gleiche in Ihrem Skript, um zu sehen, ob es etwas anders über die Pfade

BSD mailxwird irgendwo sein wie/usr/bin/mailx

mailEs sieht jedoch so aus, als ob es für den von Ihnen verwendeten Befehl unterschiedliche Optionen gibt . (Siehe man mailx/ man mail). Versuchen Sie Folgendes zu erhalten:

Subject: Message Subject 
  X-Priority: 1

Oder der Betreff, dann eine zusätzliche Überschrift:

Subject: Message Subject
X-Priority: 1

bashentfernt Zeilenumbrüche aus Variablen, wenn Sie versuchen, sie auf diese Weise zu verwenden, um einen anderen Befehl aufzurufen.

Wenn es mailx:

  • -AAngebenzusätzliche Headerfelderauf der Kommandozeile etwa "X-Loop: foo@bar" etc.

Ich würde so etwas versuchen:

#!/bin/bash
echo "Message Body" | /usr/bin/mailx -a "X-Priority: 1" -s "Message Subject" -r [email protected] -c [email protected] -- [email protected]

Ich glaube allerdings nicht, dass es eine (einfache) Möglichkeit gibt, das Standardprogramm Mail/Mailx dazu zu bringen, Anhänge hinzuzufügen. Das ist nicht möglich.

Sie könnten eine Alternative wie muttoder verwenden 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)


Hört sich an, als würde es eher das bewirken, was Sie möchten.

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]

verwandte Informationen