Pular para o conteúdo principal

Std lib

Algumas funções estão incluídas mas precisam ser importadas.

Random

Retorna elementos randômicos

>>> import random

>>> random.random()
0.3416667413859049

>>> random.randint(1, 10)
8
>>> random.randint(1, 10)
4

>>> random.choice(["red", "green", "blue"])
'red'
>>> random.choice(["red", "green", "blue"])
'blue'


>>> random.sample([1, 2, 3, 4, 5], 2)
[4, 5]
>>> random.sample([1, 2, 3, 4, 5], 2)
[1, 3]

>>> numbers = [1, 2, 3, 4, 5, 6]
>>> random.shuffle(numbers)
>>> numbers
[5, 2, 4, 6, 1, 3]

Itertools

Funções úteis para trabalhar com objetos iteráveis

>>> import itertools as it
>>> for item in it.cycle("ABCD"):
... print(item)

>>> list(it.repeat("Bruno", 10))
['Bruno', 'Bruno', 'Bruno', 'Bruno', 'Bruno', 'Bruno', 'Bruno', 'Bruno', 'Bruno
', 'Bruno']

>>> list(it.accumulate([1, 2, 3, 4, 5]))
[1, 3, 6, 10, 15]

>>> list(it.product("ABC", repeat=2))
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C',
'A'), ('C', 'B'), ('C', 'C')]

>>> list(it.permutations("ABC"))
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A',
'B'), ('C', 'B', 'A')]

>>> list(it.combinations("ABCDE", 2))
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B',
'E'), ('C', 'D'), ('C', 'E'), ('D', 'E')]

Functools

Funções uteis para manipular funções

>>> import functools as ft
>>> print("Bruno", "Rocha")
Bruno Rocha
>>> myprint = ft.partial(print, sep="---")
>>> myprint("Bruno", "Rocha")
Bruno---Rocha

Statistics

Retorna estatísticas como por exemplo média e mediana.

>>> import statistics as st
>>> st.mean([1, 2, 2, 5, 10, 12])
5.333333333333333
>>> st.median([1, 2, 2, 5, 10, 12])
3.5

UUID

Universal Unique ID

>>> import uuid
>>> uuid.uuid4()
UUID('db5601e3-5c7c-4fb0-91c4-60f33852e11c')
>>> str(uuid.uuid4())
'23b92cdb-f79f-41d9-a083-8474c02df541'

getpass

Substitui o input ao ler passwords do terminal.

>>> import getpass
>>> password = getpass.getpass()
Password: <invisible>

SMTPLIB

Para enviar e-mails podemos usar a smtplib, esta biblioteca permite o envio de mensagens formatadas no padrão SMTP.

Padrão SMTP:

From: eu@server.com
To: destino@outroserver.com, outrodestino@server.com
Subject: Assunto do email

Mensagem do email a partir daqui
e em quantas linhas precisar.
Usamos Python para formatar a mensagem com interpolação:

# setamos algumas constantes
SERVER = "localhost"
PORT = 8025
FROM = "eu@server.com"
TO = ["destino@outroserver.com", "outro@server.com"]
SUBJECT = "Assunto do e-mail"
TEXT = "Este é meu e-mail enviado via Python no terminal :)"

# interpolamos a mensagem
message = f"""\
From: {FROM}
To: {', '.join(TO)}
Subject: {SUBJECT}

{TEXT}
"""

Para enviar essa mensagem de texto usando python criamos uma instância do cliente SMTP

import smtplib

with smtplib.SMTP(host=HOST, port=PORT) as server:
server.sendmail(FROM, TO, message)

Antes de rodar o script precisamos ter um servidor de e-mails, é possível se conectar a um servidor externo, como por exemplo o do google com:

server.starttls()
server.login(username, password)

Porém localmente você pode rodar um servidor de testes embutido no próprio Python, este servidor não envia e-mails, apenas imprime na tela para debugging.

Execute isso em um terminal:

python -m smtpd -c DebuggingServer -n localhost:8025

Deixe o comando acima rodando e em outro terminal:

email.py

import smtplib

# setamos algumas constantes
SERVER = "localhost"
PORT = 8025
FROM = "eu@server.com"
TO = ["destino@outroserver.com", "outro@server.com"]
SUBJECT = "Assunto do e-mail"
TEXT = "Este é meu e-mail enviado via Python no terminal :)"

# interpolamos a mensagem
message = f"""\
From: {FROM}
To: {', '.join(TO)}
Subject: {SUBJECT}

{TEXT}
"""

with smtplib.SMTP(host=SERVER, port=PORT) as server:
server.sendmail(FROM, TO, message.encode("utf-8"))
python email.py

e no outro terminal onde o e-mail server está rodando verá:

---------- MESSAGE FOLLOWS ----------
b'From: eu@server.com'
b'To: destino@outroserver.com, outro@server.com'
b'Subject: Assunto do e-mail'
b'X-Peer: ::1'
b''
b'Este \xc3\xa9 meu e-mail enviado via Python no terminal :)'
------------ END MESSAGE ------------

para enviar e-mails contendo Rich Text precisamos usar um envelope do tipo MIMEText, nosso e-mail ficaria

import smtplib
from email.mime.text import MIMEText

# setamos algumas constantes
SERVER = "localhost"
PORT = 8025
FROM = "eu@server.com"
TO = ["destino@outroserver.com", "outro@server.com"]
SUBJECT = "Assunto do e-mail"
TEXT = "Este é meu e-mail enviado via Python no terminal :)"

message = MIMEText(TEXT)
message["Subject"] = SUBJECT
message["From"] = FROM
message["To"] = ", ".join(TO)

with smtplib.SMTP(host=SERVER, port=PORT) as server:
server.sendmail(FROM, TO, message.as_string())

O output no servidor será:

---------- MESSAGE FOLLOWS ----------
b'Content-Type: text/plain; charset="utf-8"'
b'MIME-Version: 1.0'
b'Content-Transfer-Encoding: base64'
b'Subject: Assunto do e-mail'
b'From: eu@server.com'
b'To: destino@outroserver.com, outro@server.com'
b'X-Peer: ::1'
b''
b'RXN0ZSDDqSBtZXUgZS1tYWlsIGVudmlhZG8gdmlhIFB5dGhvbiBubyB0ZXJtaW5hbCA6KQ=='
------------ END MESSAGE ------------

A vantagem de usar MIMEText é que evitamos a interpolação de string e automaticamente já será enviado como utf-8, além de que o conteúdo da mensagem será codificado em base64

Caso a mensagem contenha formatação HTML pode alterar MIMEText(TEXT, "html")

Usando mailtrap.io

Façá login em mailtrap.io e altere as informações de login para as suas próprias disponíveis em show credentials na pagina principal da sua inbox.

with smtplib.SMTP("smtp.mailtrap.io", 2525) as server:
server.login(user="83f1618af77272", password="ff77c56ae6ef22")
server.sendmail(FROM, TO, message.as_string())

Agora os e-mails serão enviados para a caixa de mensagens da mailtrap.io