Итак, под катом — статья о практике отправки отчетов по e-mail. Сейчас, перечитывая текст, понимаю, что статья — не фонтан, но может кому-нибудь пригодится.
Часто передо мной встает задача вроде такой: необходимо ежемесячно (или еженедельно/ежедневно) обработать такие-то логи, построить по ним отчет и отправить его на заданный E-Mail. В этой статье я как раз хотел бы рассказать о второй части такой задачи, а именно об отправке отчетов. Казалось бы, такая рутинная операция, но трудности с ней возникают чаще, чем может показаться на первый взгляд.
Я предпочитаю использовать уже готовые, проверенные временем, программы, а не писать каждый раз собственные скрипты. В большинстве случаев нужная программа уже была когда-то кем-то написана, зачем изобретать велосипед?
Для отправки отчетов я пользуюсь mutt.
Чтобы при помощи mutt послать письмо с аттачем, достаточно команды
mutt -s Subject -a File User@Host.com
где Subject — тема сообщения, File — имя прикрепляемого файла, а User@Host.com — получатель письма. К письму можно прикрепить несколько файлов или указать несколько получателей. Текст письма программа читает из stdin.
По умолчанию mutt использует sendmail в качестве MTA. Обычно с этим не возникает трудностей — после установки mutt мы можем сразу приступить к написанию скриптов и все будет прекрасно работать. Но мне приходилось сталкиваться с ситуацией, когда посылка писем напрямую с сервера просто запрещена правилами фаервола. В этом случае следует использовать сторонний SMTP сервер.
Проблема в том, что mutt не имеет функций MTA, то есть работа с SMTP — не его задача. Тем не менее, можно научить его слать почту через заданный smtp-сервер и поможет ему в этом программа ssmtp.
Строго говоря, ssmtp является не MTA, а просто smtp-клиентом, эмулирующим работу sendmail.
Настройка ssmtp производится путем редактирования файла /etc/ssmtp/ssmtp.conf (в вашей ОС путь к файлу может быть другим). Вот как он примерно выглядит:
root=reports@example.ru # от чьего имени шлем письма
mailhub=smtp.example.ru:465 # smtp-сервер и порт
hostname= smtp.example.ru:465 # имя нашего хоста, желательно вписать верное
AuthUser=reports@example.ru # логин
AuthPass=qwerty # пароль
UseTLS=Yes # используем зашифрованное соединение
FromLineOverride=Yes # Поле From: может задавать mutt
Если вы хотите слать отчеты через Gmail, конфиг будет выглядеть немного иначе:
root=reports@gmail.com
mailhub=smtp.gmail.com:587
hostname=localhost
UseSTARTTLS=YES
AuthUser=reports@gmail.com
AuthPass=qwerty
FromLineOverride=Yes
Пытаемся послать тестовое письмо с помощью ssmtp:
echo "" | ssmtp -v -s Hello admin@example.ru
Если письмо успешно дошло, значит все было сделано правильно. Если ssmtp говорит нечто вроде:
. . .
[->] MAIL FROM:<root@localhost>
[<-] 573 root@localhost failed to route the address
ssmtp: 573 root@localhost failed to route the address
тоже не проблема, просто ssmtp указал неверный адрес отправителя, и smtp-сервер это заметил. Когда будем слать почту через mutt, все будет задано верно.
Чтобы mutt слал почту через ssmtp, в домашнем каталоге пользователя, от имени которого мы собираемся слать отчеты, нужно подправить файл .muttrc
set sendmail="/usr/local/sbin/ssmtp" # путь к ssmtp
set realname="Example Report System" # имя отправителя
set from="reports@example.ru" # e-mail отправителя
Проверяем работу mutt:
echo "" | mutt -s Hello admin@example.ru
Письмо должно успешно дойти до получателя. Если вы хотите использовать mutt в скриптах, запускаемых по крону, нужно иметь ввиду, что mutt находится в каталоге /usr/local/bin, который по умолчанию не прописан в переменную окружения PATH в вашем crontab. Решения два — либо исправить переменную окружения PATH в кронтабе, либо использовать полное имя mutt в скриптах.
Просмотр и написание почты (mutt)
В качестве MUA, как я уже писал, у нас будет работать mutt. Это
консольная, очень удобная и простая в использовании, программа для
чтения и написания писем. Попробую коротко описать как ее настраивать
и использовать.
Создаем файл /home/user_name/.muttrc:
$ touch /home/user_name/.muttrc
Открываем и пишем:
# .muttrc - конфиг для mutt
# ---------------
# Общие настройки
# ---------------
set folder=~/Mail # каталог для почты
set alias_file=~/.mail_aliases # файл алиасов
set arrow_cursor # курсор в виде '->'
set attribution="%d, %n написал:"
# начало письма при ответе
set copy=yes # сохранять копии исходящих писем
set edit_headers # редактировать заголовки письма
set editor="vim" # редактор писем
set folder_format="%t%N %-30.30f %8s"
# вид списка папок
set index_format="%4C %Z %{%b %d} %-31.31F %N (%4c) %s"
# вид списков писем
set mailcap_path="~/.mailcap" # путь к .mailcap
set menu_scroll # прокручивать список по одной строке
set mail_check=5 # интервал проверки почты
set mbox=+mbox # файл для прочитанных сообщений
set mime_forward=ask-no # запрашивать вид пересылаемого письма
set pager_stop # в конце письма не переходить на следующее
set postponed=+drafts # черновики
set print=ask-yes # запрос перед печатью файла
set print_command=lpr # команда печати
set record=+sent # куда сохранять отправленные письма
set signature="~/.signature" # файл с подписью к сообщениям
# set show_alt # y/n вместо д/н
set send_charset="us-ascii:iso-8859-1:koi8-r:windows-1251:utf-8"
# кодировка отправляемых писем
set visual=vim # редактор вызываемый по ~v
# сортировка писем при просмотре
set sort=threads
set sort_aux=reverse-date-received
set sort_browser=reverse-date
# путь к спулу почты
# procmail уже обработал почту и вы можете указать здесь файл mbox
set spoolfile='~/Mail/mbox'
# поле From заголовка отправляемых писем
set from="KIOSK1 <kiosk1@korsa.ua>"
# собственные заголовки писем можно устанавливать с помощью my_hdr
my_hdr X-Url: http://alenitchev.nm.ru
# ------------------------------------
# Настройки просматриваемых заголовков
# ------------------------------------
ignore *
# поля которые я хочу видеть
unignore from: subject to cc mail-followup-to \
date x-mailer x-url user-agent reply-to
# ---------------
# Привязки клавиш
# ---------------
# клавиша <up> при просмотре письма на строку вверх
bind pager <up> previous-line
# клавиша <down> при просмотре письма на строку вниз
bind pager <down> next-line
# --------------
# Почтовые файлы
# --------------
# перечислите все ваши почтовые файлы
mailboxes +mbox +work +friends +lists/debian +lists/mlug
# если вы подписаны на mailing-list'ы укажите их адреса
# это нужно для использования возможности list-reply (клавиша 'L')
lists mlug@unixcenter.ru debian-russian@lists.debian.org
folder-hook mlug "push ^[V" # при открытии этих файлов нажимать 'Esc-V'
folder-hook debian "push ^[V" # (свернуть все дискуссии)
# при открытии mlug устанавливать заголовок Reply-To
folder-hook mlug "my_hdr Reply-To: \
Moscow Linux User Group <mlug@unixcenter.ru>"
# при открытии debian устанавливать заголовок Reply-To
folder-hook debian "my_hdr Reply-To: \
Debian <debian-russian@lists.debian.org>"
# Aliases.
# Очень удобное средство - укажите здесь псевдонимы и e-mail'ы
# получателей. Для написания письма можно будет использовать
# команду mutt alias_name. E-mail, соответствующий
# alias_name будет подставлен в поле From.
alias mlug Moscow Linux User Group <mlug@unixcenter.ru>
alias support TechSupport support@hostname.ru
________________________________________________________________________
В каталоге /etc находится файл Muttrc. Он может послужить вам хорошим
примером конфигурационного файла для mutt.
Создайте файлы /home/user_name/.mailcap и /home/user_name/.signature:
$ touch /home/user_name/.mailcap
$ touch /home/user_name/.signature
Файл .mailcap нам необходим для обработки MIME-типов. Приведу
небольшой пример, чтобы продемонстрировать структуру этого файла:
text/html; links %s
image/gif; xview %s
image/jpg; xview %s
Думаю, что типы, которые вам хотелось бы обрабатывать вы без труда
добавите сами.
В файле .signature укажите свою подпись. Пример я думаю приводить не
надо ;-)
Итак, настройка окончена, запускаем:
Перед собой мы видим список писем из спула
(/var/spool/mail/user_name). Нажатием клавишы '?' открываем справку.
Смотрим список клавиш, на которые нам придется нажать не один раз в
процессе ежедневной работы с этой программой. Выход из справки - 'q'.
Чтобы открыть какой-нибудь почтовый файл следует нажать 'c'. Внизу
экрана мы видим предложение ввести имя файла. Нажимайте 'Tab' или '?'
и откроется окно выбора файла. Выбираем какой-нибудь файл и видим
список почтовых сообщений. Клавишы 'Вверх', 'Вниз' - перемещение по
списку писем; 'Enter' - чтение письма; 'Page Up', 'Page Down' -
страничная прокрутка письма. Об остальных клавишах вы без труда
найдете нужную информацию во встроенной справке.
Комментариев нет:
Отправить комментарий