При использовании pywin32 для создания писем outlook в цикле, появляется "The MIT License (MIT)"

Рейтинг: 0Ответов: 1Опубликовано: 04.04.2023

Есть небольшой скрипт, который запускается через планировщик заданий и отправляет письма из txt файлов. Поместите в папку с файлом любой (или несколько) txt файл с более 3-х строк (1- почта, 2 - тема, 3 - тело сообщения). При запуске файла двойным щелчком, все отлично. Но если засунуть его в планировщик заданий, то письмо заполняется данными о лицензии. В файле письма создаются в цикле, если же цикл убрать, то все работает. Как мне обойти это ограничение? Поиск в интернете не дал результатов.

    """Модуль проверки ошибок"""
import win32com.client as win32
import os


def listdir():
    """Файлы дериктории собираем в список, отфильтровав только нужные
    """
    directory = str(os.getcwd())
    files = os.listdir(directory)
    doc = list(filter(lambda x: x[-4:] == '.txt', files))
    return doc

def Emailer(text, subject, recipient):
    outlook = win32.Dispatch('outlook.application')
    mail = outlook.CreateItem(0)
    mail.To = recipient
    mail.Subject = subject
    mail.Body = text
    mail.Display(False)
    # mail.Send()

if __name__ == '__main__':
    for i in listdir():
        with open(i, encoding='UTF8') as f: ## Открываем файл
            my_lines = list(f) ## Помещаем в список.
        email = my_lines[0]
        tema = my_lines[1]
        message1 = ''.join(my_lines[2:])
        Emailer(message1, tema, email)

введите сюда описание изображения

Ответы

▲ 0Принят

Вся проблема была в том, что при запуске через планировщик заданий, основной папкой становится C:\Windows\system32. Что бы этого избежать нужно везде указывать конкретную папку, в моём случае directory = str(os.getcwd()) - это не работает directory = "D:/" - это работает (при этом её надо вынести за пределы функции)

with open(i, encoding='UTF8') as f: это меняем на

with open(f'{directory }{i}', encoding='UTF8') as f: