Dado um arquivo de destinatários de email, isso randomizará as correspondências e enviará um e -mail a cada um deles. O aplicativo garante que ninguém se obtém, mas todas as outras combinações são consideradas válidas. Observe que o programa não indicará as correspondências ao operador, a menos que seja explicitamente instruído para fazê -lo.
As tarefas são embaralhadas repetidamente até que ninguém tenha. Embora isso possa durar para sempre, não é, a menos que você forneça ao aplicativo apenas um participante. Embora isso signifique que você ficará sozinho no Natal, sua casa será aquecida pelo seu computador, girando sem parar, tentando embaralhar dois decks de um cartão para pedidos diferentes.
Depois que as tarefas são estabelecidas e -mails são enviados e nosso trabalho é realizado. De volta a praticar suas canções e testar sua receita de gemada mais uma vez, apenas para ter certeza.
Além do fato de estarmos formatando e -mails com uma biblioteca antiga e abandonada, este aplicativo é bastante construído. Foi capaz de gerar uma correspondência válida definida em registros de 100k após 8 shuffles e aproximadamente 2 segundos. O envio de 100 mil e -mails obviamente demoraria um pouco!
go get
para instalar dependências (Logrus, urfave.cli, gophermail)go build
para compilar o executável secret-santa
./secret-santa
para executá-lo secret-santa
recebe sua lista de participantes de um arquivo JSON contendo. Cada participante Shold pode ser um membro em uma matriz com parâmetros name
e address
. Isso padrão é para data/people.json
, mas você pode usar qualquer caminho que desejar com o parâmetro --source-file
. Por favor, veja o exemplo para obter detalhes.
Você também deve personalizar seu corpo de e -mail criando um arquivo de modelo. O arquivo suporta {{.From}}
e {{.To}}
que são os nomes extraídos do arquivo JSON dos participantes. Isso é padrão para data/email.template
, mas você pode usar qualquer caminho que desejar com o parâmetro --template-file
. Por favor, veja o exemplo para obter detalhes.
NAME:
secret-santa - Secret Santa Emailer!
USAGE:
secret-santa [global options] command [command options] [arguments...]
VERSION:
0.0.1
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--from-name value Display name for sender (default: "Secret Santa Robotic Elf")
--from-address value Email address to send from (required unless dry run)
--from-password value Password for the from-address (e.g. gmail password)
--smtp-host value Host to send to (default: "smtp.gmail.com")
--smtp-port value Port to send to (default: 587)
--source-file value JSON file containing an array of name/address objects (default: "data/people.json")
--template-file value Text file containing a template used for the email body (default: "data/email.template")
--subject value Email subject (default: "Shhhh! It's your Secret Santa assignment")
--show-matches Print the pairings out when sending
--dry-run Do not send. Implies --show-matches
--help, -h show help
--version, -v print the version
$ ./secret-santa --dry-run --source-file data/example.json
INFO[0000] Shuffling...
INFO[0000] Shuffling...
INFO[0000] Shuffling...
INFO[0000] Shuffling...
INFO[0000] Shuffling...
INFO[0000] match from="Dee Dee" to=Tommy
INFO[0000] match from=Ringo to="Dee Dee"
INFO[0000] match from=George to=Paul
INFO[0000] match from=Joey to=George
INFO[0000] match from=Marky to=Ringo
INFO[0000] match from=Paul to=Marky
INFO[0000] match from=John to=Joey
INFO[0000] match from=Tommy to=John
$ ./secret-santa --from-address "[email protected]" --from-password "your_pass" --source-file data/people.json
INFO[0000] Shuffling...
INFO[0000] Shuffling...
INFO[0001] sent
INFO[0002] sent
INFO[0002] sent
INFO[0003] sent
INFO[0004] sent
INFO[0005] sent
INFO[0006] sent
INFO[0007] sent
INFO[0008] sent
INFO[0009] sent