首页 > 解决方案 > 无法通过字典 python 制作maling

问题描述

尝试将文件发送给不同的收件人,但只能发送一个,否则 - 错误。 如果 del 任何字典邮件都可以发送而没有任何问题,但对于几个字典条件不能循环

from win32com.client.gencache import EnsureDispatch
from win32com.client import constants


outlook = EnsureDispatch("Outlook.Application")
mail = outlook.CreateItem(constants.olMailItem)

PATH = 'C:/Users/aoivanov/OneDrive - ArcelorMittal/Documents/MARKETING/Consolidated_stock/'


def send_mail(mail_list, list_file, message):
    mail.Subject = 'Consolidated stock'
    mail.Body = message
    attachment_list = []

    for i in mail_list:
        samplegrp1 = mail.Recipients.Add(i)
        samplegrp1.Type = constants.olTo
        mail.Recipients.ResolveAll()

    for file in list_file:
        attachment = PATH + file
        attachment_list.append(attachment)

    for attachment in attachment_list:
        mail.Attachments.Add(attachment)

    mail.Send()


list_file_mht = ['MHT.xlsx', 'FREE_STOCK.xlsx']
mail_list_mht = ['aaa@arcelormittal.com', 'bbb@arcelormittal.com', 'ccc@gmail.com']
message_mht = 'text1'

list_file_vikant = ['VIKANT.xlsx']
mail_list_vikant = ['xxx@arcelormittal.com']
message_vikant = 'text2'

list_dic = [{'list_file': list_file_mht, 'mail_list': mail_list_mht, 'message': message_mht},
            {'list_file': list_file_vikant, 'mail_list': mail_list_vikant, 'message': message_vikant}]


for index, value in enumerate(list_dic):
    send_mail(list_dic[index].get('mail_list'), list_dic[index].get('list_file'), list_dic[index].get('message'))

标签: pythondictionaryemailoutlook

解决方案


Recipients.Add方法在集合中创建一个新的收件人Recipients并接受收件人的名称作为参数 - 它可以是一个字符串,表示收件人的显示名称、别名或完整的 SMTP 电子邮件地址。

for i in mail_list:
        samplegrp1 = mail.Recipients.Add(i)
        samplegrp1.Type = constants.olTo
        mail.Recipients.ResolveAll()

目前尚不清楚将什么值传递给该Add方法。

此外,无需ResolveAll在循环中使用该方法。相反,您可以改用ResolveRecipient 类的方法。

for i in mail_list:
        samplegrp1 = mail.Recipients.Add(i)
        samplegrp1.Type = constants.olTo
        samplegrp1.Resolve()

推荐阅读