• Home
  • Учебник по ExtJS
  • О сайте
  •  


    Удобный способ уведомления об ошибках

    Сентябрь 11th, 2008

    Как получать сообщения по электронной почте, когда в приложении возникает исключение?

    Ниже приведен пример кода, который позволяет реализовать такую функцию, причем ведет учет сообщений по ранее произошедшим событиям, не позволяя заваливать бесполезным мусором ящик разработчика:

    import sys, logging, traceback from google.appengine.ext import webapp from google.appengine.api import memcache class BaseRequestHandler(webapp.RequestHandler):     def handle_exception(self, exception, debug_mode):         exception_name = sys.exc_info()[0].__name__         exception_details = str(sys.exc_info()[1])         exception_traceback = ''.join(traceback.format_exception(*sys.exc_info()))         logging.error(exception_traceback)         exception_expiration = 3600 # в секундах (задаем максимум 1 сообщение в час по исключению)         mail_admin = "yourmail@yourdomain" # указывается администратор приложения         sitename = "yourapplication"         throttle_name = u'исключение-'+exception_name         throttle = memcache.get(throttle_name)         if throttle is None:             memcache.add(throttle_name, 1, exception_expiration)             subject = u'[%s] исключение [%s: %s]' % (sitename, exception_name, exception_details)             mail.send_mail_to_admins(sender=mail_admin,                                      subject=subject,                                      body=exception_traceback)         template_values = {}         if users.is_current_user_admin():             template_values['traceback'] = exception_traceback         self.response.out.write(template.render('error.html',                                                 template_values)) class MyHandler(BaseRequestHandler):     def get(self):         ...



    Как получать почту приложением?

    Август 20th, 2008

    К сожалению, приложения платформы Google App Engine не могут напрямую получать почтовые сообщения от внешних источников. Существует сторонний проект smtp2web, который позволяет принимать сообщения и передавать их содержимое (включая заголовки) через метод POST приложению.

    Вы можете запустить этот сервис либо на своем сервере, либо воспользоваться существующим (бесплатным) на сайте www.smtp2web.com. Причем можно использовать как работу с ящиками всего домена, так и с отдельными.

    Ниже приведен пример получения сообщения при использовании фреймворка webapp:

    from google.appengine.ext import webapp
    import email
    
    class EmailHandler(webapp.RequestHandler):
      def post(self):
        sender = self.request.GET.get("from", "")
        recipient = self.request.GET.get("to", "")
        message = email.message_from_string(self.request.body)
        # Произвести обработку сообщения

    Исходный код полностью открыт.