将带附件的 Outlook 电子邮件发送到 Excel 中 python 中的用户列表
Send Outlook email with attachment to list of users in Excel with python
我可以使用带有以下脚本的 outlook 发送电子邮件,但是如果我尝试发送附件,它会出错。
文件Name_Email.xlsx
NAME EMAIL
Roy Roy@gmail.com
Jack Jack@gmail.com
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, 0, -2147024894), None)
文件名正确,与脚本在同一目录下。
我也尝试更改附件 = 'hosts.txt',但同样的错误。不确定缺少什么。
不推荐使用 win32com 发送电子邮件(或其他任何东西)。它将程序与您的系统联系起来。例如,您将无法从 linux 系统或未安装 outlook 的 windows 系统 运行 此脚本。
SMTP 是发送电子邮件的标准。尝试按照本文所示发送电子邮件 https://school.geekwall.in/p/BJb4hizyz/how-to-send-emails-using-python
您需要稍作修改才能从 excel 文件中读取。我以前用过它,它很健壮并且跨平台(不像 win32com)。
试试这个
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 == 'your@mail.com':
newaccount = accoun
break
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, 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
我可以使用带有以下脚本的 outlook 发送电子邮件,但是如果我尝试发送附件,它会出错。
文件Name_Email.xlsx
NAME EMAIL
Roy Roy@gmail.com
Jack Jack@gmail.com
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, 0, -2147024894), None)
文件名正确,与脚本在同一目录下。
我也尝试更改附件 = 'hosts.txt',但同样的错误。不确定缺少什么。
不推荐使用 win32com 发送电子邮件(或其他任何东西)。它将程序与您的系统联系起来。例如,您将无法从 linux 系统或未安装 outlook 的 windows 系统 运行 此脚本。
SMTP 是发送电子邮件的标准。尝试按照本文所示发送电子邮件 https://school.geekwall.in/p/BJb4hizyz/how-to-send-emails-using-python 您需要稍作修改才能从 excel 文件中读取。我以前用过它,它很健壮并且跨平台(不像 win32com)。
试试这个
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 == 'your@mail.com':
newaccount = accoun
break
mail = outlook.CreateItem(0)
mail._oleobj_.Invoke(*(64209, 0, 8, 0, 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