- •Email пакеті
- •Хабарларды талдау. Message классы
- •Хабарлама қалыптастыру
- •Тақырыпша өрісін талдау
- •Атаулар кеңістігі
- •Cgi модулі
- •Өндіруші ортасы
- •Zope және оның обьектілі моделі
- •Smtplib модулі
- •Poplib модулі
- •Url талдау үшін функия
- •Urllib2 мүмкіндіктері
- •Қорытынды
- •Обьект – байланыс
- •Объект-курсор
- •Обьектер-түрлері
- •Python – қосымшаларындағы деректер қоырмен жұмыс істеу
- •Деректер қорын толтыру
- •Деректер қорынан таңдау
- •Ескерту:
- •Қорытынды
- •11 Дәріс: Көп ағынды есептеулер
- •Көп ағынды бағдарлама мысалы
- •Threading модулінің функциясы
- •Thread классы
- •Қай кезде құлыпталу қажет?
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 командасына дұрыс жауап бермеді немесе оны қабылдамады.
