在循环字典时发送电子邮件

问题描述 投票:0回答:2

我正在尝试发送多封电子邮件,每封电子邮件带有不同的文件附件。

像这样:file_A转到[email protected]_B转到[email protected]...(继续)

我尝试过此代码,但是当我遍历字典时,我所有的电子邮件都发送到[email protected],而不是按预期的方式从A到A,B到B,C到C。

import pandas as pd
import shutil, os
import os
import tempfile
import win32com.client as win32 
import glob, os

npath="yourpath/"

files=['file_a.xlsx','file_b.xlsx','file_c.xlsx']

mails=dict(zip(['[email protected]','[email protected]','[email protected]'],files))

for file in os.listdir(npath):
    if file.endswith(".xlsx"):
        outlook = win32.Dispatch('outlook.application')
        mail = outlook.CreateItem(0)
        for id,i in mails.items():
            mail.To = id            
        mail.Subject = 'Test'
        mail.HtmlBody = 'testing'
        mail.Attachments.Add(os.path.join(npath,file))
        mail.Display()

我很确定我的问题是循环或字典,但是尝试了几个小时后,我自己无法解决。

for id,i in mails.items():
            print(id)
            mail.To = id 
python email outlook win32com
2个回答
0
投票

您的循环返回正确的ID顺序。该词典还包含正确的键值对。您的for循环在mail_c处结束,因此被所有文件选中。

您可以通过将邮件内容/逻辑放入for loop中来解决它>

for file in os.listdir(npath):
    if file.endswith(".xlsx"):
        outlook = win32.Dispatch('outlook.application')
        mail = outlook.CreateItem(0)
        for id,i in mails.items():
            mail.To = id            
            mail.Subject = 'Test'
            mail.HtmlBody = 'testing'
            mail.Attachments.Add(os.path.join(npath,file))
            mail.Display()

0
投票

您的代码应使用mails dict遍历文件列表,这是一个示例:

© www.soinside.com 2019 - 2024. All rights reserved.