Если ваш mailx
не поддерживает опцию -a
и у вас нет доступа к mutt
, и вы не хотите переходить на uuencode
в качестве запасного варианта с 1980-х годов, какВ крайнем случае вы можете собрать небольшую MIME упаковку самостоятельно.
#!/bin/sh
# ... do some option processing here. The rest of the code
# assumes you have subject in $subject, file to be attached
# in $file, recipients in $recipients
boundary="${RANDOM}_${RANDOM}_${RANDOM}"
(
cat <<____HERE
Subject: $subject
To: $recipients
Mime-Version: 1.0
Content-type: multipart/related; boundary="$boundary"
--$boundary
Content-type: text/plain
Content-transfer-encoding: 7bit
____HERE
# Read message body from stdin
# Maybe apply quoted-printable encoding if you anticipate
# overlong lines and/or 8-bit character codes
cat
cat <<____HERE
--$boundary
Content-type: application/octet-stream; name="$file"
Content-disposition: attachment; filename="$file"
Content-transfer-encoding: base64
____HERE
# If you don't have base64 you will have to reimplement that, too /-:
base64 "$file"
cat <<____HERE
--$boundary--
____HERE
) | sendmail -oi -t
Путь к sendmail
часто зависит от системы.Попробуйте /usr/sbin/sendmail
или /usr/lib/sendmail
или ... множество других странных мест, если их нет в вашем PATH
.
Это быстро и грязно;для надлежащего соответствия MIME вы должны выполнить кодировку RFC2047 для субъекта, если это необходимо, и т. д., а также см. примечания в комментариях к коду.Но для вашей обычной 7-битной англоязычной работы cron в США все будет хорошо.