簡體   English   中英

發送 Outlook email 附件到 Excel 和 Z23EEEB4347BDD25DDFC6B7EE9A3 中的用戶列表

[英]Send Outlook email with attachment to list of users in Excel with python

我可以使用帶有以下腳本的 outlook 發送 email ,但是如果我嘗試發送附件,則會出錯。

文件名_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',但同樣的錯誤。 不確定缺少什么。

嘗試這個

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

不建議使用 win32com 發送 email (或其他任何東西)。 它將程序與您的系統聯系起來。 例如,您將無法從 linux 系統或未安裝 outlook 的 windows 系統運行此腳本。

SMTP 是發送電子郵件的標准。 嘗試發送 email,如本文所示https://school.geekwall.in/p/BJb4hizyz/how-to-send-emails-using-python您需要稍作修改才能從 ZDBF57C906E7D285BB66 文件中讀取。 我以前使用過它,它很健壯且跨平台(與 win32com 不同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM