Python을 사용하여 Excel에서 이메일 보내기 자동화

요전날, 아내가 일정 금액을 지불하지 않은 고객에게 알림을 보내는 방법을 도와줄 수 있는지 물었습니다. 어쨌든 아내는 중소기업을 운영하며 엑셀로 많은 일을 합니다. 그녀는 모든 사람에게 개별 이메일을 보낼 필요가 없도록 지불하지 않은 고객에게 자동으로 이메일을 보낼 수 있는 가능성이 있는지 나에게 물었습니다.

그래서 그녀를 위해 프로세스를 자동화하는 스크립트를 작성했습니다. 😃

Excel 파일에는 많은 정보가 포함되어 있지만 가장 중요한 정보인 이름, 이메일에 중점을 둡니다. 도시, 지불(예/아니오) 및 금액. 스크립트는 매우 간단하게 작동합니다. 우리는 "지불"된 셀을 가지고 있으며 클라이언트가 지불하지 않은 경우 개인화된 이메일을 보내 특정 금액을 빚지고 있음을 경고합니다. 스크립트는 지불하지 않은 모든 클라이언트에게 이메일을 보냅니다.

코드로 가자.

먼저 'xlrd '를 설치하겠습니다. 'Xlrd '는 Microsoft Excel(tm) 스프레드시트 파일에서 데이터를 추출하는 라이브러리입니다. 그 후 우리는 'smtplib '를 가져올 것입니다. smtplib 모듈은 SMTP 또는 ESMTP 수신기 데몬이 있는 인터넷 시스템에 메일을 보내는 데 사용할 수 있는 SMTP 클라이언트 세션 개체를 정의합니다.

필요한 모든 것을 가져오도록 합시다.

import xlrd
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


그런 다음 Excel 파일의 경로와 해당 파일에서 필요한 모든 정보(이름, 이메일, 도시, 유료, 금액)가 필요합니다.

path =  "clients.xlsx"
openFile = xlrd.open_workbook(path)
sheet = openFile.sheet_by_name('clients')


나는 이메일, 금액, 돈을 빚진 고객의 이름을 세 가지 다른 목록에 넣었다. 그리고 그로부터 클라이언트가 지불되었는지 여부를 확인합니다.

mail_list = []
amount = []
name = []
for k in  range(sheet.nrows-1):
    client = sheet.cell_value(k+1,0)
    email = sheet.cell_value(k+1,1)
    paid = sheet.cell_value(k+1,3)
    count_amount = sheet.cell_value(k+1,4)
    if paid ==  'No':
         mail_list.append(email)
         amount.append(count_amount)
         name.append(client)


그 후에는 이메일을 보내는 데 집중해야 합니다.

email =  '[email protected]'
password =  'pass'
server = smtplib.SMTP('smtp.gmail.com',  587)
server.starttls()
server.login(email, password)


색인을 가져와야 사람의 이름을 찾을 수 있습니다.

for mail_to in mail_list:
    send_to_email = mail_to
    find_des = mail_list.index(send_to_email)
    clientName = name[find_des]
    subject =  f'{clientName} you have a new email'
    message =  f'Dear {clientName}, \n'  \ 
               f'we inform you that you owe ${amount[find_des]}.  \n'\
               '\n'  \
               'Best Regards'
msg = MIMEMultipart()
msg['From ']  = send_to_email
msg['Subject']  = subject
msg.attach(MIMEText(message,  'plain'))
text = msg.as_string()
print(f'Sending email to {clientName}... ')
server.sendmail(email, send_to_email, text)


그리고 마지막으로 모든 것이 정상인지 확인해야 합니다.

server.quit()
print('Process is finished!')
time.sleep(10)


그리고 모두 합치자.

import xlrd
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

path = "clients.xlsx"
openFile = xlrd.open_workbook(path)
sheet = openFile.sheet_by_name('clients')


mail_list = []
amount = []
name = []
for k in range(sheet.nrows-1):
    client = sheet.cell_value(k+1,0)
    email = sheet.cell_value(k+1,1)
    paid = sheet.cell_value(k+1,3)
    count_amount = sheet.cell_value(k+1,4)
    if paid == 'No':
        mail_list.append(email) 
        amount.append(count_amount)
        name.append(client)


email = '[email protected]' 
password = 'pass' 
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)

for mail_to in mail_list:
    send_to_email = mail_to
    find_des = mail_list.index(send_to_email) 
    clientName = name[find_des] 
    subject = f'{clientName} you have a new email'
    message = f'Dear {clientName}, \n' \
              f'we inform you that you owe ${amount[find_des]}. \n'\
              '\n' \
              'Best Regards' 

    msg = MIMEMultipart()
    msg['From '] = send_to_email
    msg['Subject'] = subject
    msg.attach(MIMEText(message, 'plain'))
    text = msg.as_string()
    print(f'Sending email to {clientName}... ') 
    server.sendmail(email, send_to_email, text)

server.quit()
print('Process is finished!')
time.sleep(10) 


모두 감사합니다.

좋은 웹페이지 즐겨찾기