使用python将带有附件的Outlook电子邮件发送到Excel中的用户列表

问题描述

我可以使用带有以下脚本的Outlook发送电子邮件,但是如果我尝试发送附件,则会出错。

文件名_Email.xlsx

NAME    EMAIL
Roy     [email protected]
Jack    [email protected]

Python脚本

import win32com.client as win32
import pandas as pd

email_list = pd.read_excel(r'C:\Users\roy\Name_Email.xlsx')

names = email_list['NAME']
emails = email_list['EMAIL']

for i in range(len(emails)):
   name = names[i]
   email = emails[i]

   outlook = win32.dispatch('outlook.application')
   mail = outlook.CreateItem(0)
   mail.To = email
   mail.Subject = 'Message subject'
   mail.Body = 'Hello ' + name
   attachment = "hosts.txt"
   mail.Attachments.Add(attachment)
   mail.Send()

我遇到的错误

pywintypes.com_error: (-2147352567,'Exception occurred.',(4096,'Microsoft Outlook','Cannot find this file. Verify the path and file name are correct.',None,-2147024894),None)

文件名正确,并且与脚本位于同一目录。

我也尝试更改附件='hosts.txt',但出现相同的错误。不确定缺少什么。

解决方法

尝试

from win32com.client import Dispatch
import win32com
import pandas as pd

def mailprepare():
    num = range(0,5)
    for kk in num:
        outlook = win32com.client.Dispatch("Outlook.Application")
        for accoun in outlook.Session.Accounts:
            if accoun.SmtpAddress == '[email protected]':
                newaccount = accoun
                break
        mail = outlook.CreateItem(0)
        mail._oleobj_.Invoke(*(64209,8,newaccount))
        data = pd.ExcelFile('D:\\path.xlsx')
        sheet = data.parse('Sheet1')
        name = sheet['Names'][kk]
        mailto = sheet['Mails'][kk]

        att = 'D:\\yourattchment.txt'
        with open(att,'r') as my_attch:
            myfile=my_attch.read()

        mail.To = mailto
        mail.Subject = 'Subject'
        mail.Body = 'mail body'+ name
        mail.Attachments.Add(att)

        mail.Display(True)
        mail.send

mailprepare()
,

您只是将 hosts.txt 分配给变量,但是Attachments.Add正在查找具有文件名的完整文件系统路径

要获取当前目录,请使用

示例

import os
print(os.getcwd() + "\hosts.txt")

import os

attachment = "hosts.txt"
print(os.path.realpath(attachment))

仅供参考-我使用的是3.8 python

,

不建议使用win32com发送电子邮件(或其他方式)。它将程序与您的系统联系在一起。例如,您将无法从Linux系统或未安装Outlook的Windows系统中运行此脚本。

SMTP是发送电子邮件的标准。尝试按照本文https://school.geekwall.in/p/BJb4hizyz/how-to-send-emails-using-python所示发送电子邮件 您将需要稍作修改以从excel文件读取。我以前使用过它,它功能强大且跨平台(与win32com不同)。