Отправка письма из shell

Как отправить письмо с вложением из оболочки UNIX? Есть несколько вариантов, я рассмотрю самые простые, – системными средствами и сторонним ПО.

mail + uuencode

Почти наверняка самый рабочий способ на любой системе.

~> ( echo "body text message" ; echo ; cat file.txt | uuencode file.txt ) | mail -s 'Subject' to@domain.tld

в почтовый ящик придет сообщение в виде:

To: to@domain.tld
Subject: Subject
Message-Id: <20111205165235.0DB932ECAC@dom.tld>
Date: Mon,  5 Dec 2011 16:52:35 +0000 (UTC)
From: sender@domain.tld (sender)

body text message

begin 644 file.txt
M+W-B:6XO;61M9G,@+7,@-#`Y-DT@+6D@,3`R-"`M=R!M>7-Q;#IM>7-Q;"`M
M<"`W-S<@;60P("]M>7-Q;%]T;7`*(R,M+2TM+2TC(PT*26YC;W)R96-T(&EN
...
M;F1E>"YP:'`[(&-D("T[(&QS("UL82`D:2]I;F1E>"YP:'`[(&1O;F4*(R,M
)+2TM+2TC(PH*
`
end

Плюсы: универсальный способ, не требует установки дополнительного ПО

Минусы: не все почтовые клиенты понимают этот формат и письмо возможно придется раскодировывать. Если вы пользуетесь почтой Гугла (GMail) – вам повезло, такой формат он понимает и файл можно будет скачать как обычный прикрепленный файл.

mail + base64
~> cat file.txt | base64 | mail -s 'Subject' to@dom.tld
~> cat file.txt | uuencode -m file.txt | mail -s 'Subj' to@dom.tld

Плюсы: файл в письме отправится

Минусы: письмо наверняка будет не понято почтовым клиентом и вложение будет просто выведено в виде текста, который нужно дополнительно распаковывать. GMail такие письма не понимает.

sendmail
~> ( cat header ; cat ssh.txt | base64 ) | /usr/sbin/sendmail -t
~> ( cat header ; cat ssh.txt | uuencode -m ssh.txt ) | /usr/sbin/sendmail -t
~>
~> ( cat header ; cat ssh.txt | uuencode ssh.txt ) | /usr/sbin/sendmail -t
# это не правильно, но GMail понимает и такой формат

В файл header предварительно внесены необходимые заголовки:

~> cat header
Subject: With attachment
From: me@dom.tld
To: to@domain.tld
Content-Type: text/plain; charset=UTF-8
Content-Disposition: attachment; filename="file.txt"
Content-Transfer-Encoding: base64

Здесь мы явно указываем кодировку файла (UTF-8), имя файла, которое будет показываться в письме (может не совпадать с именем файла, который мы кодируем) и метод кодирования (base64). В третьем примере файл будет закодирован в uuencode, это тоже может вызвать сложности у почтовых клиентов. uuencode –m, в отличие от base64, помечает начало и конец закодированных данных, так же, как и просто uuencode. В первом случае начало данных будет помечено строкой:

begin-base64 644 file.txt

конец:

====

во втором случае:

begin 644 file.txt

конец:

end

Плюсы: письмо понимается большинством почтовых клиентов

Читать остальную часть заметки »

Теги: , , , , , , , , ,

Гиджет

Microsoft Fag Tag vs QR-Code = найдите 10 отличий.

Или только у меня шизофрения мне кажется, что Мелкософт заимствует черпает идеи у КОпетана?


Теги: , , , , , , , ,

Java forever

“Java 4-ever” – смотрите на всех популярных платформах мира!


Теги: , , , , , ,

Поиск в файлах

Вопрос о том, как найти подстроку или строку в файле, поднимается часто и найти на него ответ довольно просто. Так, например, можно искать сторонний код во взломанных файлах:

find . -name "*.*htm*" -exec grep -i "iframe" {} \; -print
find . -name "*.*htm*" -exec grep -i "iframe" '{}' \; -print
find /home -name '*.htm*' -exec grep -H 'fromCharCode' \{\} \;

Так можно удалить из очереди postfix письма с определенным текстом (спам-рассылку, например):

find /var/spool/postfix/deferred/ -name "*" -exec grep -i "SOMESPAM" {} \; |\
awk -F / '{print $7}' | awk '{print $1}' | postsuper -d -

А как найти файлы, в которых определенная строка не встречается?

Можно так:

find . -name "*.html" -print0 | xargs -0 grep -c "string" | grep ":0" | cut -d : -f 1

где “string” – строка, которой в файлах нет.

cut просто отрезает имя файла от количества нулевых вхождений подстроки “string”, если кому-то по душе awk, используйте в пайпе:

awk -F : '{print $1}'

Теги: , , , , , , , , ,

Make and Enter

Если вам часто приходится создавать каталоги в консоли, вам может пригодиться следующий трюк:

bash:

echo 'mkcd() { mkdir -p "$@" && cd "$_"; }' >> ~/.bashrc

csh (tcsh):

alias mkcd 'mkdir -p \!*; cd \!*'
(добавьте эту же строку в .cshrc)

ksh

alias mkcd='_(){ mkdir -p $1; cd $1; }; _'

Теперь пользуйтесь:

mkcd foo/bar

Enjoy!


Теги: , , , , , , , ,

Gloobus – предпросмотр файлов для GNU/Linux (Gnome)

Gloobus – это проект, включающий в себя три субпроекта: Gloobus-Preview, CoverGloobus и Gloobus-Flow (в данный момент заморожен).

Gloobus-Preview предназначен для предпросмотра файлов на системе Linux без их открытия соответствующими программами. Gloobus-Preview понимает более 40 форматов файлов и их количество растет:

 

Изображения: jpeg / png / icns / bmp / svg / gif / psd / xcf
Документы: pdf / cbr / cbz / doc / xls / odf / ods / odp / ppt
Исходные тексты: c++ / c# / java / javascript / php / xml / log / sh / python
Аудио: mp3 / ogg / midi / 3gp / wav
Видео: mpg /avi / ogg / 3gp / mkv / flv
Другие: каталоги / ttf / srt / plain-text

Для установки придется патчить Nautilus, но думаю игра стоит свеч :)


Теги: , , , , , , ,

Текст, текст и только текст

Текстовые редакторы помогают нам везде и всегда. Но иногда хочется остаться наедине с редактором, чтобы ничто постороннее не отвлекало при написании книги/программы/статьи и т.п. В этом случае хорошими помощниками могут быть специализированные простые редакторы, специально задуманные и разработанные для работы в полноэкранном режиме.

Самый приятный на вид – редактор #1 из этого обзора. Однако, так как я пока работаю только на M$ Windows, мне больше по душе последний в списке редактор – Notepad++.

OmmWriter (Mac OS X)

OmmWriter позволит вам сконцентрироваться на написании текста, параллельно прослушивая приятную музыку в стиле эмбиент. На экране нет ничего лишнего, только приятный фон. Настройки и опции появляются только при наведении курсора на нерабочую область. По желанию, нажатие клавиш может озвучиваться щелчками. Размер рабочей области легко изменяется. Смотрите видео:

Читать остальную часть заметки »

Теги: , , , , , , , , , , , , , ,