Задача Outlook Копировать тело RTF?Python

Программы на Python
Ответить
Anonymous
 Задача Outlook Копировать тело RTF?

Сообщение Anonymous »

Чтобы обойти общую политику нашей компании, согласно которой задачи Outlook удаляются через 10 лет независимо от даты последнего изменения, я попытался продублировать все свои задачи, а затем удалить старые задачи с помощью Python (VBA также заблокирован в соответствии с Руководством по кибербезопасности). ). К сожалению, мне не удалось скопировать тело некоторых задач с изображениями и файлами, встроенными в новую задачу. Судя по всему, у TaskItem нет HTML-тела, и я понятия не имею, как заставить работать RTFBody — я даже не знаю, смогу ли я вообще заставить его работать с RTFBody.
Я просто так сделать точно нельзя:

Код: Выделить всё

new_task.RTFBody = old_task.RTFBody
Это выдает сообщение об ошибке:

Код: Выделить всё

An error occurred: (-2147024809, 'The parameter is incorrect.', None, None)
Я попробовал декодировать содержимое RTFBody с помощью:

Код: Выделить всё

rtf_data = bytes(old_task.RTFBody)
rtf_content = rtf_data.decode('utf-8', errors='ignore')
Но я понятия не имею, что на самом деле означает декодированный контент. Не говоря уже о том, что я даже не знаю, почему это имеет смысл — в конце концов мне придется передать двоичные данные обратно в новую задачу, не так ли?
Вот полная код - поможет?

Код: Выделить всё

import win32com.client
import tempfile
import os
import shutil

def duplicate_and_delete_tasks():
try:
outlook = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")

tasks_folder = namespace.GetDefaultFolder(13)

original_tasks = [task for task in tasks_folder.Items if task.Class == 48]

for task in original_tasks:
print("Task being processed: " + task.Subject)
new_task = tasks_folder.Items.Add("IPM.Task")
new_task.Subject = task.Subject
try:
new_task.RTFBody = task.RTFBody
except:
new_task.Body = task.Body
new_task.StartDate = task.StartDate
new_task.DueDate = task.DueDate
new_task.Categories = task.Categories
new_task.Importance = task.Importance
new_task.Status = task.Status
# if task.Attachments.Count > 0:
#     temp_dir = tempfile.mkdtemp()
#     for attachment in task.Attachments:
#         try:
#             attachment.SaveAsFile(os.path.join(temp_dir, attachment.FileName))
#             new_task.Attachments.Add(os.path.join(temp_dir, attachment.FileName))
#         except:
#             pass
#     shutil.rmtree(temp_dir)
new_task.Save()
print("New task created.")
task.Delete()
print("Old task deleted.")

print("All tasks have been successfully processed.")

except Exception as e:
print(f"An error occurred: {e}")

duplicate_and_delete_tasks()
С уважением

Подробнее здесь: https://stackoverflow.com/questions/793 ... y-rtf-body
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»