Last active
August 29, 2015 14:10
-
-
Save gabicavalcante/a0d33938346e9c39f7f1 to your computer and use it in GitHub Desktop.
Código para sorteio e envio de email avisando quem-tirou-quem.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding=utf-8 | |
# Modulo sorteio.py | |
# Data de criação 18/12/2014 | |
# Gabriela Cavalcante da Silva | |
''' | |
- Coloque nomes sem acentos. | |
- O arquivo com nome e email deve estrar na seguinte estrutura: | |
nome1 email1 | |
nome2 email2 | |
... | |
- O arquivo com os dados devem estar no mesmo diretório que o código .py | |
''' | |
import smtplib | |
import random | |
import sys | |
import os | |
from email.mime.multipart import MIMEMultipart | |
from email.mime.text import MIMEText | |
from email.MIMEMultipart import MIMEMultipart | |
from email.Utils import COMMASPACE, formatdate | |
pessoas_sorteadas = {} # pessoas que ainda vão ser retiradas para sorteio [poderia ser só um vetor] | |
participantes = {} # todos os participantes do sorteio { nome_participante : email } | |
resultado_sorteio = {} # resultado do sorteio { nome_participante: pessoa_sorteada } | |
# Função de envio do email | |
def enviar(addressee, to, fulano) : | |
# settings | |
_host = 'smtp.gmail.com' | |
_port = 587 | |
# data | |
_addressee = addressee # origem | |
_to = to # destino | |
_subject = "Confra das pessoas queridas, lindas e populares do labsid" | |
# objeto da mensagem | |
mensagem = MIMEMultipart() | |
# cabeçalho | |
mensagem['Subject'] = _subject | |
mensagem['From'] = _addressee | |
mensagem['To'] = _to | |
mensagem['Date'] = formatdate(localtime=True) | |
# corpo da mensagem | |
text = "Você tirou %s" %fulano | |
mensagem.attach(MIMEText(text, 'plain')) | |
# login | |
user = 'email@email.com' | |
password = 'senha' | |
# Enviar mensagem via SMTP server. | |
server = smtplib.SMTP(host=_host, port=_port) | |
server.starttls() | |
server.login(user, password) | |
# Enviar email | |
server.sendmail(_addressee, _to, mensagem.as_string()) | |
print "\nEmail enviado" | |
server.quit() | |
# Função que ler o arquivo de texto | |
def readFile(path): | |
try: | |
with open(path, 'r') as arquivo: | |
while True: | |
line = arquivo.readline() | |
if not line: break # linha em branco | |
participantes.update( | |
{ line.split(" ").__getitem__(0): line.split(" ") | |
.__getitem__(1)} ) # separa a linha em nome e email | |
# Tratamento de erro | |
except IOError: | |
print('\nArquivo não encontrado!') | |
# Função que realiza o sorteio | |
def sorteio(): | |
pessoas_sorteadas = dict(participantes) # copio o dicionário participantes para pessoas_sorteadas | |
cont_people = (len(participantes)) - 1 # quantidade de participante | |
while(cont_people >= 0): | |
people = random.choice(pessoas_sorteadas.keys()) # pessoa sorteada dentro das que restaram em pessoas_sorteadas | |
pessoas_sorteadas.pop(people) # removo da lista das que serão sorteadas a que acabou de ser | |
resultado_sorteio.update( | |
{ participantes.keys()[cont_people] : people } # { nome do participante: pessoa tirada por ele } | |
) | |
cont_people -= 1 | |
''' | |
verifica se existiu alguém que tirou a si mesmo, | |
caso não tenha, envia um email para cada registro do dicionário ''' | |
if(verificar_invalidos()): rotina_de_envio() | |
else: print("Reexecute o programa, houve falha do sorteio") # Caso alguém tenha tirado a si mesmo, há um aviso de falha | |
def rotina_de_envio(): | |
for data in resultado_sorteio: | |
print(participantes.get(data), participantes.get(data) , resultado_sorteio.get(data)) | |
enviar(data, participantes.get(data) , resultado_sorteio.get(data)) # enviar email | |
def verificar_invalidos(): | |
for data in resultado_sorteio: | |
if (data == resultado_sorteio.get(data)): | |
return False | |
return True | |
if __name__ == '__main__': | |
# arquivo de texto com a estrutura: | |
# Nome_do_Participante Email_do_Participante | |
readFile('sorteio.txt') | |
sorteio() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment