💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ Mohamad Mahdi Yazdani
ارسال گزارش‌ها از جیمیل خودتون به بقیه
جامعه پایتون (وب) ایجاد شده در ۱۱ آبان ۱۳۹۹

سلام دوستان
برای ارسال گزارش‌ها به ایمیل علاوه بر روش هایی که استاد گفتن یه روش هست از جیمیل خودتون میتونید به بقیه ایمیل بزنید 
اول باید یه اپشن گوگل رو برای جیمیلتون فعال کنید که اجازه دسترسی برنامه هارو به جیمیلتون رو بده که اینجا کلیک کنید روشش رو گذاشتم اگر هم روی مرورگرتون قبلا با جیمیل 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)

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

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

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

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

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

Mohsen Azizi ۱۲ اردیبهشت ۱۴۰۰، ۱۵:۵۳