
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
자꾸 아래 코드에서 무한 로딩이 되면서 메일도 오지 않습니다.

# schedule 라이브러리 설치
!pip install schedule
import openpyxl
import smtplib
import schedule
import time
import threading
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from pytz import timezone
from datetime import datetime
# 엑셀 파일에서 데이터 읽기
file_path = 'customer_data_test.xlsx'
sheet_name = 'test_name_email' # 실제 시트 이름으로 변경
# openpyxl을 사용하여 엑셀 파일 읽기
wb = openpyxl.load_workbook(file_path)
sheet = wb[sheet_name]
# 이메일 전송 함수 정의
def send_email(to_email, subject, body):
from_email = 'nagaon50@gmail.com' # 실제 발신자 이메일 주소
password = 'cbrk yina tsql dunp' # 생성된 애플리케이션 비밀번호
# 이메일 메시지 설정
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
# Gmail SMTP 서버 설정 및 이메일 전송
try:
server = smtplib.SMTP('smtp.gmail.com', 587) # Gmail SMTP 서버 및 포트
server.starttls()
server.login(from_email, password)
text = msg.as_string()
server.sendmail(from_email, to_email, text)
server.quit()
print(f"Email sent to {to_email}")
except Exception as e:
print(f"Failed to send email to {to_email}: {e}")
# 이메일 보내기 작업 예약
def send_emails():
subject = "귀여운 Salemale 메일이 도착했어요!"
body_template = """\
안녕하세요, {name}님!
저희 Salemale 앱을 사랑해주셔서 감사합니다! 특별한 소식을 전해드릴게요. Salemale 앱을 이용해 즐거운 시간 보내시길 바라며, 더 많은 사랑 부탁드려요! 😊
감사합니다,
Salemale 팀 드림
"""
# 엑셀 시트의 데이터를 순회하며 이메일 전송
for row in sheet.iter_rows(min_row=2, values_only=True): # 첫 번째 행은 헤더이므로 2행부터 시작
name, email = row
body = body_template.format(name=name)
send_email(email, subject, body)
# 스케줄링을 백그라운드에서 실행하기 위한 함수 정의
def run_schedule():
while True:
schedule.run_pending()
time.sleep(1) # 1초마다 스케줄 확인
# 매주 화요일 오후 9시 11분에 이메일 보내기 작업 예약
schedule.every().tuesday.at("21:11").do(send_emails)
# 스케줄링을 백그라운드에서 실행
thread = threading.Thread(target=run_schedule)
thread.daemon = True
thread.start()
# 메인 스레드를 유지하기 위해 대기
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
print("작업을 종료합니다.")
