2014-02-28 2 views
0

Я отправляю почту на «[email protected]» (несуществующий адрес электронной почты), используя мой код ниже. Поскольку этот адрес электронной почты не существует, письмо должно быть возвращено. Я хочу получить сообщение об ошибке, но мой код не печатает это сообщение об ошибке. В чем проблема, и как мне получить сообщение об ошибке?Извлечь сообщение об ошибке при отправке письма на несуществующий адрес

import smtplib 
import email 
import imaplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

def processNewTripData(request): 
    # process trip data 
    templateName = "sendmail.html" 
    mapDictionary = {'fromMail': "[email protected]", 'password': "xxxx", 'toMail': "[email protected]","subject": "New Trip ", 'username': 'Ram','trip_start_date' : '2014-02-10','trip_start_place' : 'Visaka', 'trip_start_time' : '11:00 AM', "templateName" : templateName } 
    return sendMail(request, mapDictionary) 


def sendMail(request, mapDictionary): 
    try: 
     server = smtplib.SMTP('smtp.gmail.com',587) 
     server.starttls() 
     server.login(mapDictionary["fromMail"],mapDictionary["password"]) 
     context = Context(mapDictionary) 
     html_content = render_to_string(mapDictionary["templateName"], context) 
     #text_content = "This is Confirmation mail"  
     msg = MIMEText(html_content,'html') 
     msg['Subject'] = mapDictionary["subject"] 

     server.sendmail(mapDictionary["fromMail"], mapDictionary['toMail'],msg.as_string()) 

     if (msg.is_multipart() and len(msg.get_payload()) > 1 and msg.get_payload(1).get_content_type() == 'message/delivery-status'): 
     # email is DSN 
     print(msg.get_payload(0).get_payload()) # human-readable section 
     for dsn in msg.get_payload(1).get_payload(): 
      print('action: %s' % dsn['action']) # e.g., "failed", "delivered" 

     to_json = {'result' : "True"} 


    except Exception as e: 
     print str(e) 
     to_json = {'result' : "False"} 

ответ

2

Нет гарантии, что сообщение об ошибке будет сообщено во время сеанса. SMTP в основном представляет собой протокол хранения и передачи; вы должны ожидать, что сообщение будет обработано реле, которое не знает, достигнет ли конечный пункт назначения конечный пункт назначения. Даже если вы напрямую подключаетесь к назначенному MX от Google, у них может быть внутренняя маршрутизация, которая работает именно так. Некоторые домены также откладывают сообщения об ошибках, чтобы замедлить спамеры (попытка доставки была бы хорошим способом проверить, какие адреса действительны в противном случае. Фактически, то, что вы делаете, вероятно, относится к Google, как к вам, новичкам-спаммерам, поэтому они мог бы поместить ваш IP-адрес в список хостов, чтобы дать «специальное» лечение).

+0

Единственный способ справиться с этим с приближением к точности - это установить заголовок Reply-To, чтобы любые сообщения об отказе могли обрабатываться отдельной программой. Внедряя логику для чтения сообщений и обработки сообщений об ошибках в различных форматах с разных SMTP-серверов, я знаю, что не все серверы будут беспокоиться о том, чтобы обработать заголовок Reply-To при поднятии сообщений об ошибках, а некоторые настроены не на повышение сообщений об отказе вообще. В моем проекте был потенциал мошенничества с кредитными картами. Таким образом, чем больше отскоков мы могли бы поймать, тем меньше мы были обмануты, и это стоило реализовать. – holdenweb

Смежные вопросы