Я создаю программу, чтобы можно было легко отправлять электронные письма списку людей с уникальным файлом, отправляемым каждому получателю.Эта программа считывает список в форме файла .csv с фамилией, именем, адресом электронной почты и соответствующим вложением для каждого получателя, использует шаблон для настройки каждого письма с именем получателя и прикрепляет его файл.
Код можно увидеть ниже.Я использовал заполнители для строки темы и адреса электронной почты и скрыл фактический текст письма, но вы должны быть в состоянии понять идею.Переменная email_data - это то место, куда изначально загружается файл .csv, содержащий информацию о получателе.
import csv
import datetime
import sys
import smtplib
import yagmail
import tkinter as tk
from tkinter import filedialog
from tkinter import simpledialog
root = tk.Tk()
root.withdraw()
password = simpledialog.askstring("Password", "Enter password:", show='*')
current_date = datetime.datetime.now()
subject_line = f'xyz {current_date.strftime("%B")} {current_date.year} xyz File'
LNAMES = []
FNAMES = []
EMAILS = []
FILES = []
yag = yagmail.SMTP('xyz@xyx.com', password)
email_data = filedialog.askopenfilename(filetypes=[('.csv', '.csv')],
title='Select the Email Data file')
def send_email():
with open(email_data) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
last_name = row[0]
first_name = row[1]
email = row[2]
file = row[3]
LNAMES.append(last_name)
FNAMES.append(first_name)
EMAILS.append(email)
FILES.append(file)
line_count += 1
try:
for first_name, last_name, email, file in zip(FNAMES, LNAMES, EMAILS, FILES):
txt = '...'
yag.send(to=email,
subject=subject_line,
contents=[txt, file])
print("Email(s) sent successfully")
input("Press Enter to exit")
sys.exit(1)
except smtplib.SMTPAuthenticationError:
print("Incorrect Email password entered")
input("Press Enter to exit")
sys.exit(1)
send_email()
Проблема, с которой я сталкиваюсь, заключается в том, что если указанный файл не находится в рабочем каталоге, электронное письмо отправляетсяс фрагментом текста в нижней части электронного письма, который говорит что-то вроде «file.xlsx» вместо фактического вложения.Есть ли способ вызвать исключение, если файл не найден, поэтому электронное письмо не просто отправляется без реального вложения?