Отправка e-mail с сервера или свой вариант sendmail

Иногда возникает необходимость отправить e-mail сообщение без установки почтового сервера, по аналогии с утилитой sendxmpp, которой для работы не обязательно иметь рабочий xmpp сервер на том же хосте, что и утилита запускается. Это бывает необходимо для отправки нотификаций с сервера, например из скриптов мониторинга состояния.

Итак, что нам понадобится? Всё просто:
- Python 2.5 - 2.7;
- Аккаунт на любом почтовом сервере.

Как запустить? Тоже ничего сложного:
- Копируем дамп, который указан ниже, в файл sendmail.py
- Заполняем внутри:
FROM = 'sender@mail.tld' - будет отображаться в поле from входящего письма
TO = ['user1@mail.tld','user2@mail.tld'] - список e-mail'ов для рассылки
LOGIN = 'sender@mail.tld' - логин на smtp сервере. некоторые сервера могут требовать указать полный e-mail в логине
PASSWD = '*****' - пароль
SMTP_SERVER = 'smtp.mail.tld' - smtp сервер
SMTP_PORT = 25 - порт smtp сервера
SUBJ = 'WARNING!' - тема письма
DEBUG = False - отладка. при необходимости можно сменить на True
- Запускаем скрипт командой python sendmail.py "Something wrong on server!"
- Если скрипт запустить без указания текста и в той же папке, что и скрипт будет файл sendmail.txt - он будет отправлен. Это нужно для отправки многострочного текста. Пример ниже отправляет список всех процессов: ps aux > sendmail.txt && python sendmail.py
- Текстовый файл для отправки должен иметь то же имя, что и скрипт и находиться в той же папке.
- Скрипт не работает с юникодом, но для нотификация достаточно ascii.

Собственно сам дамп отправлялки:

#!/usr/bin/python
# -*- coding: utf-8 -*-
# --------------------------------------------------------------------------- #
# #
# Send Mail #
# Copyright (C) diSabler <dsy@dsy.name> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
# --------------------------------------------------------------------------- #
import sys,smtplib,os
def readfile(filename):
fp = file(filename)
data = fp.read()
fp.close()
return data
FROM = 'sender@mail.tld'
TO = ['user1@mail.tld','user2@mail.tld']
LOGIN = 'sender@mail.tld'
PASSWD = '*****'
SMTP_SERVER = 'smtp.mail.tld'
SMTP_PORT = 25
SUBJ = 'WARNING!'
DEBUG = False
if len(sys.argv) > 1: text = ' '.join(sys.argv[1:])
else:
text_file = '%s.txt' % '.'.join(sys.argv[0].split('.')[:-1])
text = readfile(text_file)
try: os.remove(text_file)
except: pass
msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" % (FROM, ", ".join(TO), SUBJ, text)
server = smtplib.SMTP(SMTP_SERVER,SMTP_PORT)
if DEBUG: server.set_debuglevel(1)
server.login(LOGIN,PASSWD)
server.sendmail(FROM, TO, msg)
server.quit()