Почему MAPI не может переместить всю почту в папку? - PullRequest
0 голосов
/ 15 апреля 2020

Я создаю zmq client python скрипт для работы с zmq сервером. Он работает на всех клиентах хорошо, но когда я создаю новую почтовую папку для перемещения, fini sh работает (клиент) в эту папку. Я использую функцию mail.Move. Это работает какой-то клиент. Это мой код клиента:

import zmq
import json
import win32com.client
import time
import os
context = zmq.Context()
print('Connecting to manager approve server…')
socket = context.socket(zmq.REQ)
socket.connect('tcp://localhost:5555')
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Folders.Item("1.Manager")
donembox = outlook.GetDefaultFolder(6).Folders.Item("1.1done_manager")
outlook = inbox.Items
mail = outlook.GetLast()
for mail in outlook:
  if mail.Body == "Status: Manager Approved \r\n":
    print('Inv number : '+str(mail.Subject))
    socket.send_string(mail.Subject)
    message = socket.recv()
    time.sleep(1)
    print('Inv number : '+str(mail.Subject) + " was moved to AP approval Process.")
    time.sleep(1)
    mail.Move(donembox)
    print(str(mail.Subject)+ ' success.')

Это мой код сервера zmq:

import time
import threading
import zmq
import win32com.client
import os, sys
import pyautogui as py
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind('tcp://*:5555')
print("Manager Server port 5555 Activate!")
while True:
  message = socket.recv()
  print('Received request: {}'.format(message))
  time.sleep(20)
  path = "R:/<my accounting team>/Project/Invoice form/Invoice_generate/"+str(message)+"/"+str(message)+".xlsm"
  isExist = os.path.exists(path) 
  print(isExist) 
  if os.path.exists(path):
      xl=win32com.client.Dispatch("Excel.Application")
      xl.Workbooks.Open(os.path.abspath(path))
      xl.Application.Run("Module6.manager()")
      xl.Application.Quit()
      del xl
      time.sleep(2)
      py.click(599,392)
      time.sleep(2)
  socket.send_json({ 'status': 'ok' })
  print('Reply')
  print(path)

1 Ответ

0 голосов
/ 17 апреля 2020

Поскольку вы изменяете (вызывая MailItem.Move) саму коллекцию, которую вы обрабатываете, следовательно, ваш код пропустит некоторые элементы.

Измените l oop на обратный для l oop ( от Items.Count до 1).

...