Простой и гибкий способ - отформатировать не только содержимое электронной почты, но и тему электронной почты. Это требует подклассов logging.handlers.SMTPHandler
.
Таким образом, если в настроенной вами теме есть ссылки на переменные, она будет расширена по требованию. Вот реализация, включающая тестовый код:
import logging, logging.handlers
class TitledSMTPHandler(logging.handlers.SMTPHandler):
def getSubject(self, record):
formatter = logging.Formatter(fmt=self.subject)
return formatter.format(record)
# below is to test
logging.getLogger().addHandler(TitledSMTPHandler(
('your.smtp.server',587),
'email@from.address', 'email@to.address',
'%(asctime)s Error: %(message)s',
('SMTP login', 'SMTP password'), ()
))
logging.error("TestError")
Замените конфигурацию SMTP на вашу, запустите код, и вы получите электронное письмо с сообщением об ошибке в теме (также в теле письма).
Если вы определяете обработчик в файле конфигурации регистрации, не забудьте экранировать ссылки на параметры. например %(asctime)s
должно стать %%(asctime)s
, чтобы предотвратить преждевременную интерполяцию configparser - однако экранирование %%
не поддерживается в Python 3.1 и до него.
Пожалуйста, если вы будете задавать один вопрос за раз, вы сильно поможете другим пользователям Google. Вы должны начать две темы, одна называется "Есть ли способ, как поместить имя исключения в тему письма?" а другой "есть ли способ, как предотвратить отправку все тех же ошибок?"
Я отвечу только на ваш первый вопрос, чтобы сосредоточиться на одной теме. Возможно, вы подумали, что эти два вопроса могут зависеть друг от друга, поэтому их нужно задавать вместе, а они просто приходили вам в голову вместе. Я думаю, что все еще целесообразно предложить вам изменить название вашего вопроса, чтобы подчеркнуть одну проблему, вместо того, чтобы говорить «продвинутый материал».
Я также хотел бы предложить посетить comp.lang.python, если вопрос является открытой темой и / или не может быть четко определен (например, «Я хочу продвинутые вещи, что все остальные используют?»)