سلام دوستان
برای ارسال گزارش ها به ایمیل علاوه بر روش هایی که استاد گفتن یه روش هست از جیمیل خودتون میتونید به بقیه ایمیل بزنید
اول باید یه اپشن گوگل رو برای جیمیلتون فعال کنید که اجازه دسترسی برنامه هارو به جیمیلتون رو بده که اینجا کلیک کنید روشش رو گذاشتم اگر هم روی مرورگرتون قبلا با جیمیل sing in کرده باشید اینجا رو کلیک کنید.
بعدش برای کد زدن هم میتونید از اموزش این سایت استفاده کنید.
توی کد زدن زیاد فرقی با کد استاد نداره فقط یه قسمتش رو باید عوض کنید که اونم دامین هست دامین رو باید smtp.gmail.com باشه.
smtplib.SMTP('smtp.gmail.com', 587)
امیدوارم مفید باشه.
سلام
بعد از دیدن این سر فصل با خودم فکر کردم که چقدر خوب میشد اگر بشه که ایمیلی که ارسال میکنیم یه متن خشک و خالی نباشه
برای همین تصمیم گرفتم که داده ها در قالب یه جدول ارسال کنم
برای این کار از یه پکیج به نام jinja۲ استفاده کردم که یه template engine است
در تابع ارسال ایمیل باید نوع متن ارسالی رو روی html تنظیم کنیم
import smtplib
from email.message import EmailMessage
from mail_config import sender, receiver, smtp
def send_smtp_mail(subject, body):
message = EmailMessage()
message['from'] = sender['email']
message['to'] = receiver['email']
message['subject'] = subject
html_message = body
message.set_content(html_message, 'html')
try:
with smtplib.SMTP(smtp['server'], smtp['port']) as server:
server.ehlo()
server.starttls()
server.login(sender['email'], sender['password'])
server.send_message(message)
print('Successfully send the mail')
except Exception:
print('Failed to send mail')
در ادامه باید یه دایرکتوری به نام templates در روت پروژه بسازیم و اونو به jinja۲ معرفی کنیم و یه سند html داخل دایرکتوری بسازیم.
در ادامه ما باید سند رو واکشی کنیم تا بتونیم به اون داده ارسال کنیم
from jinja2 import Environment, FileSystemLoader
import os
root_path = os.path.dirname(__file__)
env = Environment(
loader=FileSystemLoader(f'{root_path}/templates/')
)
template = env.get_template('email.html')
با استفاده از jinja۲ ما میتونیم از حلقه ها شرط ها متغیر ها داخل سند های html استفاده کنیم
به سند زیر یه متغیر به نام currency ارسال کردم که از جنس دیکشنری هست و اونو پیمایش میکنم و به ازای هر دور از حقله یه سطر برای جدول در سند html ایجاد میشود که شامل اسم ارز و قیمت آن میباشد
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<table style='border: 1px solid black; border-collapse: collapse;'>
<tr>
<th style='border: 1px solid black; border-collapse: collapse; padding: 15px;'>currency</th>
<th style='border: 1px solid black; border-collapse: collapse; padding: 15px;'>Price</th>
</tr>
{% for key, value in currency.items() %}
<tr>
<th style='border: 1px solid black; border-collapse: collapse; padding: 15px;'>{{ key }}</th>
<th style='border: 1px solid black; border-collapse: collapse; padding: 15px;'>{{ value }}</th>
</tr>
{% endfor %}
</table>
</body>
</html>
در نهایت کافیه که ما فقط rates رو به سند ارسال کنیم
برای ارسال داده به سند از متد render میشه استفاده کرد
from config import url, rules
from setting import template
from mail import send_smtp_mail
def send_mail(subject, rates):
subject = f'{subject} rates'
if rules['send_mail']['preferred'] is not None:
tmp = dict()
for rate in rules['send_mail']['preferred']:
tmp[rate] = rates[rate]
rates = tmp
render = template.render(
currency=rates
)
send_smtp_mail(subject, render)
این راه حلی بود که من پیدا کردم
اگر کسی راه حل بهتری میشناسه خوشحال میشم برام همینجا بنویسه
در ضمن کد های ارسال یه سند به وسیله ایمیل رو داخل این مخزن نوشتم
اگر دوست داشتید استفاده کنید