Ist es möglich, Anhänge von Unix/AiX zu senden, ohne Uuencode und den Befehl MUTE zu verwenden?
Wir können ein Perl-Skript schreiben, das E-Mails ordnungsgemäß, jedoch ohne Anhang versendet. Kann ich den Perl-Code zum Senden von PDF-Anhängen erhalten?
#!/usr/bin/perl
$to = '[email protected]';
$from = '[email protected]';
$subject = 'Email from QA server';
$message = 'This is test email sent by Perl Script1';
open(MAIL, "|/usr/sbin/sendmail -t");
# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;
close(MAIL);
print "Email Sent Successfully\n";
Antwort1
Hier ist eine Bash-Funktion zum Senden einer E-Mail mit Anhängen. Ich habe sie für ein Linux-System geschrieben, daher wird erwartet, dass das base64
Programm verfügbar ist.
########################################################################
# usage: echo "$body" | email_attachment -f from -t to -c cc -s subject -a attachment_filename
# the -a option can be specified multiple times
email_attachment() {
local from to cc subject attachments=()
local OPTIND OPTARG
local body=$( cat )
local boundary="_====-boundary-${$}-$(date +%Y%m%d%H%M%S)-====_"
while getopts f:t:c:s:a: opt; do
case $opt in
f) from=$OPTARG ;;
t) to=$OPTARG ;;
c) cc=$OPTARG ;;
s) subject=$OPTARG ;;
a) attachments+=( "$OPTARG" ) ;;
esac
done
{
echo "From: $from"
echo "To: $to"
echo "Cc: $cc"
echo "Subject: $subject"
echo "Content-Type: multipart/mixed; boundary=\"$boundary\""
echo "Mime-Version: 1.0"
echo
echo "This is a multi-part message in MIME format."
echo
printf -- "--%s\n" "$boundary"
echo "Content-Type: text/plain; charset=ISO-8859-1"
echo
echo "$body"
echo
for filename in "${attachments[@]}"; do
# attach it if it's readable and non-zero size
if [[ -r "$filename" ]] && [[ -s "$filename" ]]; then
printf -- "--%s\n" "$boundary"
echo "Content-Transfer-Encoding: base64"
echo "Content-Type: application/octet-stream; name=$(basename "$filename")"
echo "Content-Disposition: attachment; filename=$(basename "$filename")"
echo
base64 "$filename"
echo
fi
done
printf -- "--%s--\n" "$boundary"
} | /usr/lib/sendmail -oi -t
}