Вы можете получить BehaviorService
и подписаться на его BeginDrag
и EndDrag
события.
BeginDrag
: Происходит, когда BehaviorService
начинает операцию перетаскивания. EndDrag
: Происходит, когда BehaviorService
завершает операцию перетаскивания. Пример
Сначала необходимо получить экземпляр BehaviorService
, например, если у вас есть доступ к дизайнеру, хосту дизайнера или сайту можно получить службу поведения следующим образом:
var behaviorSvc = (BehaviorService)Site.GetService(typeof(BehaviorService));
Затем подписаться на события:
behaviorSvc.BeginDrag += BehaviorSvc_BeginDrag;
behaviorSvc.EndDrag += BehaviorSvc_EndDrag;
и обрабатывать события:
private void BehaviorSvc_EndDrag(object sender, BehaviorDragDropEventArgs e)
{
}
private void BehaviorSvc_BeginDrag(object sender, BehaviorDragDropEventArgs e)
{
}
В составном сообщении электронной почты email.message.Message.get_payload ()
возвращает список с одним элементом для каждой части. Самый простой способ - просмотреть сообщение и получить полезную нагрузку для каждой части:
import email
msg = email.message_from_string(raw_message)
for part in msg.walk():
# each part is a either non-multipart, or another multipart message
# that contains further parts... Message is organized like a tree
if part.get_content_type() == 'text/plain':
print part.get_payload() # prints the raw text
Для сообщения, не состоящего из нескольких частей, нет необходимости выполнять все действия. Вы можете сразу перейти к get_payload (), независимо от content_type.
msg = email.message_from_string(raw_message)
msg.get_payload()
Если контент закодирован, вам нужно передать None
в качестве первого параметра в get_payload ()
, а затем Истина (флаг декодирования - второй параметр). Например, предположим, что мое электронное письмо содержит вложение документа MS Word:
msg = email.message_from_string(raw_message)
for part in msg.walk():
if part.get_content_type() == 'application/msword':
name = part.get_param('name') or 'MyDoc.doc'
f = open(name, 'wb')
f.write(part.get_payload(None, True)) # You need None as the first param
# because part.is_multipart()
# is False
f.close()
Что касается получения разумного простого текстового приближения части HTML, я обнаружил, что html2text работает чертовски хорошо.
Прибавлять превосходный ответ @Jarret Hardie:
мне лично нравится преобразовывать такие структуры данных к словарю, который я могу снова использовать позже, таким образом, что-то вроде этого, где эти content_type
ключ и эти payload
, является значением:
import email
[...]
email_message = {
part.get_content_type(): part.get_payload()
for part in email.message_from_bytes(raw_email).walk()
}
print(email_message["text/plain"])