Како слати е-пошту преко Гмаил-а у Питхон-у?

Ручно слање великог броја е-порука је досадан задатак. Можете да користите услуге трећих страна за слање е-порука на велико истовремено.

Шта кажете на то да направите сопствену прилагођену скрипту за слање е-поште?

Зар није дивно?

Да, то је. Написаћемо скрипту у Питхон-у за слање е-поште.

Питхон има библиотеку под називом смтплиб која се користи за слање е-поште. Библиотека смтплиб је заснована на СМТП (Симпле Маил Транспорт Протоцол). СМТП се користи за слање е-поште другима.

Подесите Гмаил

Овде ћемо користити Гмаил као добављач е-поште. Гоогле не дозвољава скриптама да се пријаве. И морамо да променимо безбедност нашег Гмаил налога који дозвољава скриптама да се пријаве на наш Гмаил налог.

Промена безбедносне опције на нашем Гмаил налогу није добра јер омогућава другима да врло лако приступе налогу. Препоручује се да направите нови Гмаил налог. Идите на подешавања овде и укључите поставку Дозволи мање безбедне апликације: УКЉУЧЕНО.

Ако вам није пријатно да укључите горњу поставку, можете да користите Гоогле АПИ да бисте се пријавили на свој Гмаил налог. Можете пронаћи скрипту за коришћење Гоогле АПИ-ја за аутентификацију овде.

Кораци за слање поште

Потребно је урадити одређене кораке да бисте послали пошту помоћу библиотеке смтплиб. Хајде да прво видимо кораке, а затим ћемо написати скрипту.

#1. Повезивање са СМТП сервером

Сваки провајдер услуга ће имати различито име домена и порт СМТП сервера. Морамо да користимо име домена СМТП сервера и порт провајдера е-поште које ћемо користити у скрипти. Име домена и порт СМТП сервера за Гмаил су смтп.гмаил.цом и <ем>465.

  Заштитите свој кућни Минецрафт сервер од ДДОС напада помоћу АВС-а

Користићемо ССЛ енкрипцију за везу са СМТП сервером јер је безбеднија од ТСЛ енкрипције. Ако желите да користите ТСЛ шифровање, користите порт 587 уместо 465. Име домена СМТП сервера ће се разликовати у зависности од добављача услуге е-поште.

Код за повезивање са СМТП сервером

server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)

#2. Пријавите се

Када се успостави веза са СМТП сервером, можемо се пријавити помоћу адресе е-поште и лозинке помоћу методе СМТП објекта за пријаву. Код изгледа овако.

server.login(sender_email, password)

#3. Пошаљи пошту

Након пријаве, нема шансе да чекамо да пошаљемо пошту. Пошаљите пошту користећи сендмаил метод. Обавезно пошаљите пошту у следећем формату.

Наслов: ваш_субјецт_фор невлине маил_цонтент

Простори нису потребни. Они су само за појашњење у горњем формату. Хајде да видимо пример кода.

server.sendmail(sender_mail, email, f"Subject: {subject}n{content}")

#4. Одустати

Не заборавите да напустите СМТП ц

Видели смо кораке за слање поште помоћу Питхон-а. Али, нисмо разговарали о комплетном коду. Хајде да брзо прођемо кроз код.

import smtplib, ssl

class Mail:

    def __init__(self):
        self.port = 465
        self.smtp_server_domain_name = "smtp.gmail.com"
        self.sender_mail = "GMAIL_ADDRESS"
        self.password = "SECURE_PASSWORD"

    def send(self, emails, subject, content):
        ssl_context = ssl.create_default_context()
        service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
        service.login(self.sender_mail, self.password)
        
        for email in emails:
            result = service.sendmail(self.sender_mail, email, f"Subject: {subject}n{content}")

        service.quit()


if __name__ == '__main__':
    mails = input("Enter emails: ").split()
    subject = input("Enter subject: ")
    content = input("Enter content: ")

    mail = Mail()
    mail.send(mails, subject, content)

Направили смо класу под називом Маил. И има метод који се зове слање за слање поште. На вама је да ли желите час писања или не. Класа га чини читљивијим. У методу слања имплементирали смо све горе наведене кораке један по један.

Ура! послали сте пошту користећи Питхон скрипту.

ХТМЛ садржај

Шта ако желите да пошаљете пошту у ХТМЛ-у? Да ли је могуће?

  Зашто мој миш двапут кликће?

Да зашто не. Можемо да пошаљемо пошту користећи ХТМЛ библиотеку која се зове емаил.миме. То је уграђена библиотека.

Тхе МИМЕ је стандард који се користи за проширење формата е-поште за подршку апликацијским програмима, видео записима, сликама итд.,

Постоје две класе које су нам потребне из модула емаил.миме. Они су МИМЕТект и МИМЕМмултипарт. Хајде да видимо кратко објашњење о њима.

#1. МИМЕТект

Класа МИМЕТект се користи за писање садржаја наше поште у ХТМЛ-у. Направићемо инстанцу класе МИМЕТект преношењем ХТМЛ садржаја и типа садржаја. Погледајте пример кода испод.

html_content = MIMEText(html_template, 'html')

Неки сервиси поште не подржавају ХТМЛ приказивање. Дакле, боље је креирати две инстанце класе МИМЕТект за обичан текст и ХТМЛ.

#2. МИМЕМмултипарт

Класа МИМЕМултипарт се користи за поједностављење форматирања и писања предмета, од адресе, до адресе итд. Садржај креиран класом МИМЕТект даћемо МИМЕМултипарт користећи метод причвршћивања.

Морамо да се уверимо да је инстанца МИМЕМултипарт креирана са алтернативом аргумента за приказивање обичног текста или ХТМЛ-а. Хајде да пошаљемо маил са ХТМЛ садржајем.

import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


class Mail:

    def __init__(self):
        ...

    def send(self, emails):
        ssl_context = ssl.create_default_context()
        service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
        service.login(self.sender_mail, self.password)
        
        for email in emails:
            mail = MIMEMultipart('alternative')
            mail['Subject'] = 'techblog.co.rs Celebrations'
            mail['From'] = self.sender_mail
            mail['To'] = email

            text_template = """
            techblog.co.rs

            Hi {0},
            We are delighted announce that our website hits 10 Million views this month.
            """
            html_template = """
            <h1>techblog.co.rs</h1>

            <p>Hi {0},</p>
            <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p>
            """

            html_content = MIMEText(html_template.format(email.split("@")[0]), 'html')
            text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain')

            mail.attach(text_content)
            mail.attach(html_content)

            service.sendmail(self.sender_mail, email, mail.as_string())

        service.quit()


if __name__ == '__main__':
    mails = input("Enter emails: ").split()

    mail = Mail()
    mail.send(mails)

Такође можете додати слепу копију користећи тај атрибут Бцц у МИМЕМмултипарт инстанци.

  Како уклонити свој Инстаграм налог са телефона

Додавање прилога

Прилози могу бити слике, пдф-ови, документи, листови итд. У класи емаил.миме се зове МИМЕБасе. Користи се за додавање прилога у пошту.

Хајде да додамо прилог у горњу пошту.

import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from pathlib import Path


class Mail:

    def __init__(self):
        ...

    def send(self, emails):
        ## login...
        
        for email in emails:
            ## MIMEMultipart instance

            ## text and html templates

            ## MIMEText instances

            ## attaching messages to MIMEMultipart

            ## attaching an attachment
            file_path = "techblog.co.rs-logo.png"
            mimeBase = MIMEBase("application", "octet-stream")
            with open(file_path, "rb") as file:
                mimeBase.set_payload(file.read())
            encoders.encode_base64(mimeBase)
            mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}")
            mail.attach(mimeBase)

            ## sending mail

        service.quit()


if __name__ == '__main__':
    mails = input("Enter emails: ").split()

    mail = Mail()
    mail.send(mails)

Пошаљите масовну пошту одједном

Користили смо петљу да пошаљемо исту пошту више чланова. То је један случај (када не желите да пријемници знају за друге пријемнике).

Претпоставимо да морате послати исту пошту 1000 чланова исте групе одједном. У таквим случајевима, коришћење петље неће бити прикладно. Можемо додати више имејлова у поље За у општем састављању поште. Како то учинити у Питхон скрипти?

Морамо да комбинујемо листу имејлова као стринг одвојен зарезом и размаком. Можемо да користимо стринг методе придруживања да комбинујемо све поруке е-поште као стринг. Погледајте код за комбиновање е-порука као стринг.

", ".join(emails)

Замените поље За у горњој скрипти користећи горњи низ. То је то, послали сте пошту на масовну пошту одједном.

Закључак

Постоје неке библиотеке трећих страна за слање е-поште у Питхон-у. Неки од њих су Коверте, Иагмаил, Фланкер, итд.. Ове библиотеке нам помажу да пишемо скрипте са неколико линија кода. Можете их и истражити.

Сада можете да аутоматизујете своју е-пошту користећи Питхон скрипте. Структура слања е-поште ће се разликовати у зависности од вашег случаја употребе. Видели смо различите сценарије слања е-поште. Скрипте о којима се говори у туторијалу можете лако прилагодити свом случају употребе. Преузео сам референцу из овога чланак.

Срећно кодирање 🙂