ارسال گزارش ها از جیمیل خودتون به بقیه

پرسیده شده
فعالیت 1090 روز پیش
دیده شده 650 بار
3

سلام دوستان
برای ارسال گزارش ها به ایمیل علاوه بر روش هایی که استاد گفتن یه روش هست از جیمیل خودتون میتونید به بقیه ایمیل بزنید 
اول باید یه اپشن گوگل رو برای جیمیلتون فعال کنید که اجازه دسترسی برنامه هارو به جیمیلتون رو بده که اینجا کلیک کنید روشش رو گذاشتم اگر هم روی مرورگرتون قبلا با جیمیل sing in کرده باشید اینجا رو کلیک کنید.

 

بعدش برای کد زدن هم میتونید از اموزش این سایت استفاده کنید.
توی کد زدن زیاد فرقی با کد استاد نداره فقط یه قسمتش رو باید عوض کنید که اونم دامین هست دامین رو باید smtp.gmail.com باشه.

smtplib.SMTP('smtp.gmail.com', 587)

امیدوارم مفید باشه.

فایل پیوست

Mohammad Mahdi Yazdani
Mohammad Mahdi Yazdani

11 آبان 99

0
حذف شده

سلام

بعد از دیدن این سر فصل با خودم فکر کردم که چقدر خوب میشد اگر بشه که ایمیلی که ارسال میکنیم یه متن خشک و خالی نباشه

برای همین تصمیم گرفتم که داده ها در قالب یه جدول ارسال کنم

 

برای این کار از یه پکیج به نام 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)

این راه حلی بود که من پیدا کردم

اگر کسی راه حل بهتری میشناسه خوشحال میشم برام همینجا بنویسه

در ضمن کد های ارسال یه سند به وسیله ایمیل رو داخل این مخزن نوشتم

اگر دوست داشتید استفاده کنید

https://github.com/Mohsen7640/send-email-with-python

فایل پیوست

Mohsen Azizi

توسط

Mohsen Azizi

12 اردیبهشت 00