Мои знания поиска в Google дали за 2 минут результат.
import smtplib # Импортируем библиотеку по работе с SMTP
# Добавляем необходимые подклассы - MIME-типы
from email.mime.multipart import MIMEMultipart # Многокомпонентный объект
from email.mime.text import MIMEText # Текст/HTML
from email.mime.image import MIMEImage # Изображения
addr_from = "email@mail.ru" # Адресат
addr_to = "email@mail.ru" # Получатель
password = "password" # Пароль
msg = MIMEMultipart() # Создаем сообщение
msg['From'] = addr_from # Адресат
msg['To'] = addr_to # Получатель
msg['Subject'] = 'Тема сообщения' # Тема сообщения
#body = "Текст сообщения"
#msg.attach(MIMEText(body, 'plain')) # Добавляем в сообщение текст
table = [{"username":"Alex", "email":"alex@alex.ru"}, {"username":"Habr", "email":"habrrr@habr.ru"}]
result = ''
for i in table:
result += f"<tr><td>{i['username']}</td><td>{i['email']}</td></tr>"
html = f"""\
<html>
<head></head>
<body>
<table border="1">
<tr>
<th>Username</th>
<th>eMail</th>
</tr>
{result}
</table>
</body>
</html>
"""
msg.attach(MIMEText(html, 'html', 'utf-8')) # Добавляем в сообщение HTML-фрагмент
server = smtplib.SMTP('smtp.mail.ru', 587) # Создаем объект SMTP
server.set_debuglevel(True) # Включаем режим отладки - если отчет не нужен, строку можно закомментировать
server.starttls() # Начинаем шифрованный обмен по TLS
server.login(addr_from, password) # Получаем доступ
server.send_message(msg) # Отправляем сообщение
server.quit()