Я пытаюсь разослать электронные письма с вложениями различным получателям, хранящимся в CSV-файле. Моя цель - отправить получателям соответствующее вложение, которое хранится в указанном c месте.
CSV выглядит так
Name,Emails,Firm
Tom,tom@fakedomian.com,Firm1
Dick,dick@fakedomain.com,Firm2
Harry,harry@fakedomain.com,Firm3
Внутри папки вложения будут выглядеть так
path='C:\\Documents\\Firms'
В этом месте файлы будут выглядеть следующим образом
Firm1.xlsx
Firm2.xlsx
Firm3.xlsx
В следующем коде имя и адрес электронной почты в csv используются для отправки персонализированного электронного письма при просмотре папки в прикрепите соответствующий файл Excel.
import email, csv, smtplib, ssl, fnmatch, os, codecs
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import fnmatch
path = 'C:\\Documents\\Firms'
email_html = open('email.html')
body = email_html.read()
from_address = "youremail@domain.com"
password = input("Type your password and press enter: ")
#context = ssl.create_default_context()
with smtplib.SMTP("smtp.office365.com", 587) as server:
server.ehlo()
server.starttls()
server.login(from_address, password)
with open("Firms.csv") as file:
reader = csv.reader(file)
next(reader)
for Name, Email, Firm in reader:
# Create a multipart message and set headers
message = MIMEMultipart()
message["From"] = from_address
message["To"] = Email
message["Subject"] = 'Test ' + Name
#Add body to email and excel attachment
message.attach(MIMEText(body, "html"))
for i in os.listdir(path):
if os.path.isfile(os.path.join(path,i)) and Firm in i:
with open(os.path.join(path, i), 'rt', encoding='ISO-8859-1') as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
"Content-Disposition",f"attachment; filename= {Firm}",)
message.attach(part)
text = message.as_string()
# Use server to send email
server.sendmail(from_address, Email, text.format(name=Name))
Хотя при этом отправляются электронные письма, вложения не в формате Excel. Когда я использовал кодировку = 'utf8', я получал бы следующую ошибку
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 18: character maps to <undefined>
Любая помощь здесь будет высоко ценится.