Gửi email Outlook với tệp đính kèm tới danh sách người dùng trong Excel bằng python
Aug 16 2020
Tôi có thể gửi email bằng cách sử dụng outlook với tập lệnh bên dưới, nhưng nếu tôi cố gắng gửi tệp đính kèm, nó sẽ báo lỗi.
Tên tệp_Email.xlsx
NAME EMAIL
Roy [email protected]
Jack [email protected]
Tập lệnh 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()
lỗi tôi đang nhận được:
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)
Tên tệp chính xác và nó nằm trong cùng thư mục với tập lệnh.
Ngoài ra, tôi đã cố gắng thay đổi tệp đính kèm = 'hosts.txt', nhưng cùng một lỗi. Không chắc chắn những gì còn thiếu.
Trả lời
1 SrinathNeela Aug 16 2020 at 21:00
thử cái này
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, 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()
0m3r Aug 17 2020 at 08:25
Bạn chỉ cần gán hosts.txt
cho một biến nhưng Attachments.Add đang tìm kiếm đường dẫn hệ thống tệp đầy đủ với tên tệp
Để sử dụng thư mục hiện tại
Thí dụ
import os
print(os.getcwd() + "\hosts.txt")
Hoặc là
import os
attachment = "hosts.txt"
print(os.path.realpath(attachment))
FYI - Tôi đang ở trên 3.8 python