【发布时间】:2021-05-21 15:02:57
【问题描述】:
我在使用以下解决方案时遇到了一些麻烦,我创建了一个通过 Outlook 发送电子邮件的函数,使用 win32 包,导致 smtblib 在我工作的地方被阻止。该函数本身就像一个魅力:
def sendEmail(emailTo, emailCC, emailSubject, emailAttach, emailBody):
for item in psutil.pids():
if psutil.pid_exists(item):
p = psutil.Process(item)
if p.name() == 'OUTLOOK.EXE':
os.system('taskkill /f /im OUTLOOK.EXE')
break
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.Subject = emailSubject
mail.To = emailTo
mail.CC = emailCC
#mail.Body = emailBody
mail.HTMLBody = emailBody
if not emailAttach:
print('No Attachements...\n')
else:
print('Attaching files...\n')
for i in range(0, len(emailAttach)):
mail.Attachments.Add(emailAttach[i])
mail.Send()
time.sleep(30)
这里的问题是,有时我们需要在 for 循环中向不同的人发送多封不同的电子邮件,但是由于代码比电子邮件创建速度更快,有时它会失败,我想知道是否有我监控电子邮件是否完成的方法,据我所知,在任务栏上,它在创建和发送电子邮件时打开带有齿轮的 Outlook。这里的要点是我是否有办法监控电子邮件何时创建并确实发送给我以继续下一个项目。
我强制等待 30 秒睡眠,但我确信有更好、更 Python 的方式来做到这一点。
【问题讨论】:
标签: python email winapi outlook smtplib