Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2011 15:39:20

Passer
От:
Зарегистрирован: 2011-11-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Есть следующий скрипт

import os
import re
import smtplib
from email.mime.text import MIMEText
import time
import urllib.request

# Fill the next parameters

# SMTP server
smtp_server = "smtp.inbox.ru"
# SMTP port
smtp_port = 25
# SMTP login
smtp_address = "vatnika@inbox.ru"
# SMTP password
smtp_password = "35692858f"
# Email topic
email_topic = "Topic"
# Mail body
mail_body = "Spam message."
############################

usedEmails = []
num = 0

while True:
u = urllib.request.urlopen("http://otvet.mail.ru/drama/")
page = u.read()

emailPattern = r"[0-9a-zA-Z_\-\.]+@[0-9a-z-A-Z\.]+\.[a-zA-Z]+"
patternRe = re.compile(emailPattern)
page=str(page)

for address in patternRe.findall(page):
if not address in usedEmails:
num = num + 1
msg = MIMEText(mail_body + address, "", "utf-8")
msg['From'] = smtp_address
msg['To'] = address
msg['Subject'] = email_topic
mailServer = smtplib.SMTP(smtp_server, smtp_port)
mailServer.login(smtp_address, smtp_password)
mailServer.sendmail(smtp_address, address, msg.as_string())
mailServer.close()
print(num, address)
usedEmails.append(address)
time.sleep(15)
При запуске выдаёт ошибку

Traceback (most recent call last):
File "C:\py3eg\spamer.otvet.mail.ru.py", line 52, in <module>
mailServer.sendmail(smtp_address, address, msg.as_string())
File "C:\Python32\lib\smtplib.py", line 742, in sendmail
raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
Как обрабатывать такие исключения?



Офлайн

#2 Ноя. 20, 2011 16:45:17

fanatid
От:
Зарегистрирован: 2011-09-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Точно так же, как и другие.
Поймать все исключения:

try:
{your code}
except Exception as e:
print e
И определенное для данного случая (работает быстрее, т.к. проверяется только принадлежность только к определенному типу исключений)
try:
{your code}
except smtplib.SMTPDataError as e:
print e
Если нужно реагировать на все исключения из smtplib, тогда smtplib.SMTPException



Офлайн

#3 Ноя. 20, 2011 16:58:25

Passer
От:
Зарегистрирован: 2011-11-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Пишу

try:
{your code}
except Exception as e:
print e
интерпретатор выдаёт ошибку invalid syntax и выделяет “е” в строке “print e”.



Отредактировано (Ноя. 20, 2011 17:00:36)

Офлайн

#4 Ноя. 20, 2011 17:09:03

krot
От:
Зарегистрирован: 2011-07-03
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Обработка исключения

Если python 3, то
print(e)



Офлайн

#5 Ноя. 20, 2011 17:11:08

fanatid
От:
Зарегистрирован: 2011-09-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

В 3 ветке print является функцией, соответсвенно должно быть print(e).



Офлайн

#6 Ноя. 20, 2011 17:12:43

fanatid
От:
Зарегистрирован: 2011-09-21
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

krot
Если python 3, то
print(e)
У него третий, в первом сообщении в исключении, путь к третему указан.



Офлайн

#7 Ноя. 20, 2011 17:21:53

Passer
От:
Зарегистрирован: 2011-11-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

Работает, но теперь программа пытаясь послать письмо на найденный почтовый ящик xfb@Mail.Ru не может это сделать и пытается снова и снова отправить на этот ящик письмо.

Интерпретатор выдаёт:

(550, b'Message was not accepted -- invalid mailbox.  Local mailbox xfb@Mail.Ru is unavailable: user not found')
(550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
(550, b'Message was not accepted -- invalid mailbox. Local mailbox xfb@Mail.Ru is unavailable: user not found')
...
Нужно чтобы если в процессе работы программы появляется ошибка smtplib.SMTPDataError программа искала следующий ящик и пыталась отправить сообщение на него.



Отредактировано (Ноя. 20, 2011 17:26:58)

Офлайн

#8 Ноя. 20, 2011 23:18:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9973
Репутация: +  856  -
Профиль   Отправить e-mail  

Обработка исключения

    try:
mailServer.sendmail(smtp_address, address, msg.as_string())
except smtplib.SMTPDataError as e:
if e[0] == 550: # возможно, по-другому надо доставать, типа e.errno
print('wrong address {0}'.format(address))
continue



Отредактировано (Ноя. 20, 2011 23:22:10)

Офлайн

#9 Ноя. 21, 2011 09:32:29

nerijus
От:
Зарегистрирован: 2010-06-03
Сообщения: 93
Репутация: +  1  -
Профиль   Отправить e-mail  

Обработка исключения

fanatid
Поймать все исключения:
Хорошо что у вас хотя бы “print e” а не “pass”. Но все ровно толку от этого кода никакого. И рано или поздно такие заглушки приведет к беде. Взять весь код в try-except да еще обрабатывать только Exception это как страусу воткнуть голову в землю.



Офлайн

#10 Ноя. 22, 2011 17:07:02

Passer
От:
Зарегистрирован: 2011-11-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка исключения

py.user.next
    try:
mailServer.sendmail(smtp_address, address, msg.as_string())
except smtplib.SMTPDataError as e:
if e[0] == 550: # возможно, по-другому надо доставать, типа e.errno
print('wrong address {0}'.format(address))
continue
Зачем здесь ?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version