Показать страницуСсылки сюдаODT преобразованиеPDFэкспорт ODT=>PDFНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Отправка письма с аттачем из скрипта ====== Возникла задача отправить письмо с аттачем из bash-скрипта, который запускается по cron'у. В принципе, есть простое решение: поставить пакет metamail и звать на помощь команду metasend. К сожалению, это не наш путь, т.к. скрипт должен выполняться на генте, с которой проблем нет, и на старом-старом ASPLinux'е, пакеты к которому уже не найдёшь. Творческое почесывание макушки привело к такому решению: <code bash> ##################################################################### # ## Part 2. Mail report. # ##################################################################### MAILFROM="from@some.tld" MAILTO="to@another.tld dst@theother.tld" SUBJECT="Server data `date +%F\ %X`" BODY="${SUBJECT}" ATTACH="/tmp/top_secret_data.txt" MAILPART=`uuidgen` ## Generates Unique ID ( echo "From: $MAILFROM" echo "To: $MAILTO" echo "Subject: $SUBJECT" echo "MIME-Version: 1.0" echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\"" echo "" echo "--$MAILPART" echo "Content-Type: text/plain; charset=ISO-8859-1" echo "" echo $BODY echo "" echo "--$MAILPART" echo 'Content-Type: text/csv; name="'new_server_$(basename $ATTACH)'"' echo "Content-Transfer-Encoding: base64" echo 'Content-Disposition: attachment; filename="'new_server_$(basename $ATTACH)'"' echo "" openssl base64 -in $ATTACH echo "--$MAILPART--" ) | /usr/sbin/sendmail $MAILTO </code> Что важно в данном решении: * используется только три команды: echo, openssl и sendmail. Мне еще ни разу не встречались системы в которых не было бы этих команд, т.е. решение в высшей степени портабольно. * Если _тело_ письма (т.е. непосредственно его текст) должно содержать альтернативные представления, например, html и plain-text, необходимо завести еще один разделитель, с помощью которого разделять вхождения альтернативных представленией. Т.е. вместо: <code bash> echo "Content-Type: text/plain; charset=ISO-8859-1" echo "" echo $BODY echo "" </code> надо указать что-то типа такого: <code bash> echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\"" echo "" echo "--$MAILPART_BODY" echo "Content-Type: text/plain; charset=ISO-8859-1" echo "" echo $PLAIN_TEXT_BODY echo "--$MAILPART_BODY" echo "Content-Type: text/html; charset=ISO-8859-1" echo "Content-Disposition: inline" echo $HTML_TEXT_BODY echo "--$MAILPART_BODY--" echo "" </code>