#!/usr/local/bin/python
# Copyright (C) 2005 Krzysztof Kozlowski
#   License: GNU General Public License
#            http://www.gnu.org/licenses/gpl.txt
#
# Homepage: http://www.kozik.net.pl
#
# Ostatnia zmiana: 5.12.2005
# Wersja 1.0.2
#
# Mail do wszystkich :)
#  - dopisanie do ich mboxa (wiec szybki i gladki sposob)
#  - zwykly SMTP (jesli ma plik .forward)

import dircache
import os
import sys
import time
import smtplib
import getpass
from email.MIMEText import MIMEText

if len(sys.argv) == 3:
	PLIK = sys.argv[2]
	SUBJECT = sys.argv[1]
else:
	print 'Wywolanie: '
	print '   ' + sys.argv[0] + ' temat plik_z_wiadomoscia'
	sys.exit()

# Ustawienia
DIR='/home'		# katalog z lista userow...
ME='administrator@enter.net.pl'
DOMAIN='enter.net.pl'

FP = open(PLIK, 'rb')
MSG = MIMEText(FP.read(), 'plain', 'ISO-8859-2')
FP.close()

MSG['Subject'] = SUBJECT
MSG['From'] = ME
MSG['To'] = ME
TEST = 0

MSG_HEAD = 'From ' + ME + '  ' + time.strftime('%a %b %d %H:%M:%S %Y') + '\n Return-Path: <' + ME + '>\n Date: ' + time.strftime('%a,  %d %b %Y %H:%M:%S (%Z)') + '\n'
#Message-Id: ' +time.strftime('%Y%m%d') + '999999.1AA9687211C@twin.enter.net.pl>\n'
MSG_USER = ''

SMTP_USER = raw_input('Podaj nazwe uzytkownika dla SASL: ')
SMTP_PASS = getpass.getpass('Podaj haslo: ')

def wyslij_maila(FROM, TO, BODY, SMTP_USER, SMTP_PASS):
	s = smtplib.SMTP()
	s.connect()
	s.login(SMTP_USER, SMTP_PASS)
	s.sendmail(FROM, TO, BODY)
	s.close()

def dopisz_maila(TO, PRE, BODY):
	plik=open('/var/mail/'+TO, 'a')
	plik.write(PRE)
	plik.write(BODY)
	plik.write('\n')
	plik.close()


def czy_jest_forward(USER):
	if os.path.lexists('/var/home/' + USER + '/.forward'):
		if (os.path.getsize('/var/home/' + USER + '/.forward') > 0):
			return 1
		else:
			return 0

	
list = dircache.listdir(DIR)
COUNT_MBOX = 0
COUNT_SMTP = 0
COUNT = 0
for dir in list:
	USERNAME = os.path.basename(dir)
	if (USERNAME == 'index.htm'):
		continue
	COUNT = COUNT + 1
	#if (COUNT <= 55):
	#	continue
	if (TEST == 1):
		USERNAME = 'faq'
		USERNAME = 'kozik'
	if (czy_jest_forward(USERNAME)):
		wyslij_maila(ME, USERNAME, MSG.as_string(), SMTP_USER, SMTP_PASS)
		time.sleep(0.01)
		BY_SMTP = 1
		COUNT_SMTP = COUNT_SMTP + 1
	else:
		MSG_USER = 'Delivered-To: ' + USERNAME + '@' + DOMAIN + '\n'
		dopisz_maila(USERNAME, MSG_HEAD+MSG_USER, MSG.as_string())
		time.sleep(0.05)
		BY_SMTP=0
		COUNT_MBOX = COUNT_MBOX + 1
	print 'List nr ' + str(COUNT) + ' do ' + USERNAME + ' (SMTP: ' + str(BY_SMTP) + ')'
	if (TEST == 1):
		sys.exit()

print '\n   ---------   '
print '   Wyslalem ' + str(COUNT_SMTP) + ' listow (SMTP)'
print '   Dopisalem ' + str(COUNT_MBOX) + ' listow (MBOX)'

