Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
104-155.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
122.82 Кб
Скачать

Smtplib модулі

Электронды почтадағы хабарлама интернетте клиенттен серверге және серверлер арасында көбіне SMTP (Simple Mail Transfer Protocol, почтаны жіберудің қарапайым хаттамасы) хаттамасы бойынша жіберіледі. SMTP және ESMTP (SMTP кеңейтілген нұсқасы) хаттамалары RFC 821 және RFC 1869-де сипатталған. SMTP-мен жұмыс істеу үшін стандарты модулдер кітапханасында smtplib модулі бар. Электронды почта серверімен SMTP-байланысын бастау үшін, SMTP класс конструкторы көмегімен SMTP-сессиясын басқару үшін басында обьект құру керек:

smtplib.SMTP([host[, port]])

host және port параметрлері, ол арқылы почта жіберілетін, адрес және SMTP-серверінің портын береді. Үнсіз келісім бойынша port=25. Егер host берілген болса, конструктор өзі байланысты орнатады, әйтпесе connect() әдісін жеке шақыруға тура келеді. SMTP классының көшірмелері барлық таратылған SMTP-хаттамаларының командалары үшін әдістері бар, бірақ почтаны жіберу үшін конструкторды және sendmail() және quit() әдістерін шақыру жеткілікті:

# -*- coding: cp1251 -*-

from smtplib import SMTP

fromaddr = "student@mail.ru" # Кімнен

toaddr = "rnd@onego.ru" # Кімге

message = """From: Student <%(fromaddr)s>

To: Lecturer <%(toaddr)s>

Subject: From Python course student

MIME-Version: 1.0

Content-Type: text/plain; charset=Windows-1251

Content-Transfer-Encoding: 8bit

Сәлеметсіздерме!Мен Python тілін үйренудемін.

"""

connect = SMTP('mail.onego.ru')

connect.set_debuglevel(1)

connect.sendmail(fromaddr, toaddr, message % vars())

connect.quit()

Ескере кететіні, toaddr хабарламада (To өрісінде) және жіберілуде сәйкес келмеуі мүмкін. Мәселесінде қабылдаушы және жіберуші SMTP-сессияларында SMTP-хаттамасының командаларымен жіберіледі. Жоғарыда келтірілген мысалды жібергенде экранда дұрысталған мәлімет шығады (дұрысталу деңгейі 1-ге тең етіліп берген):

send: 'ehlo rnd.onego.ru\r\n'

reply: '250-mail.onego.ru Hello as3-042.dialup.onego.ru [195.161.147.4],

pleased to meet you\r\n'

send: 'mail FROM:<student@mail.ru> size=270\r\n'

reply: '250 2.1.0 <student@mail.ru>... Sender ok\r\n'

send: 'rcpt TO:<rnd@onego.ru>\r\n'

reply: '250 2.1.5 <rnd@onego.ru>... Recipient ok\r\n'

send: 'data\r\n'

reply: '354 Enter mail, end with "." on a line by itself\r\n'

send: 'From: Student <student@mail.ru>\r\n . . . '

reply: '250 2.0.0 iBPFgQ7q028433 Message accepted for delivery\r\n'

send: 'quit\r\n'

reply: '221 2.0.0 mail.onego.ru closing connection\r\n'

Бұл (біршама қысқартылған) дұрысталған мәліметтен клиент командаларды SMTP-серверіне (EHLO, MAIL FROM, RCPT TO, DATA, QUIT), жіберілгенін(send) көруге болады, ал анау, қайтарылым кодын қайтара отырып командаларды орындайды және жауап береді (reply).

SMTP-сессиясының орындалу кезінде бірнеше хаттарды бірден жіберуге болады, егер quit ( ) шақырмаса.

Негізінде, SMTP командаларын бөлекте беруге болады: бұл үшін байланыс обьектісінің, SMTP-хаттамасының бір атты командаларымен сәйкес келетін, әдістері бар (helo(), ehlo(), expn(), help(), mail(), rcpt(), vrfy(), send(), noop(), data()).

docmd() әдісінің көмегімен SMTP-серверіне ерікті командасында беруге болады. Келесі мысалда, кімде-кім уақыт өте келе кейбір домендер үшін кезекті хабарлама сақталатын почталық серверден SMTP хаттамасы бойынша өз серверіне почтаны қабылдайтындар қолдана алатын, қарапайым сценарийі көрсетілген:

from smtplib import SMTP

connect = SMTP('mx.abcde.ru')

connect.set_debuglevel(1)

connect.docmd("ETRN rnd.abcde.ru")

connect.quit()

Бұл қарапайым сценарий mx.abcde.ru серверіне rnd.abcde.ru доменіндегі негізгі почталық сервермен байланысуға әрекет жасап көруін ұсынады және барлық оған жинақталған почтаны жібереді.

smtplib.SMTP классымен жұмыс кезінде түрлі ерекше жағдайлар туындауы мүмкін. Олардың кейбір тағайындалулары төменде келтірілген:

smtplib.SMTPException

Барлық модулдердің ерекше жағдайына базалық класс.

smtplib.SMTPServerDisconnected

Сервер аяқастынан байланысты үзді (немесе сервермен байланыс орнатылмаған).

smtplib.SMTPResponseException

SMTP-сервер жауабының кодына ие барлық ерекше жағдай үшін базалық класс.

smtplib.SMTPSenderRefused

Жiберушiнi қабылдамайды

smtplib.SMTPRecipientsRefused

Барлық алушылар сервермен қабылданбаған.

smtplib.SMTPDataError

Сервер берілген хабарламаға белгісіз кодпен жауап берді.

smtplib.SMTPConnectError

Байланыс орнату кезіндегі қате.

smtplib.SMTPHeloError

Сервер HELO командасына дұрыс жауап бермеді немесе оны қабылдамады.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]