
import openpyxl
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import schedule
import time
def send_email():
# Gmail SMTP 서버 설정
smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_username = 'jujunara2670@gmail.com'
smtp_password = ''
# Excel 파일에서 이름과 이메일 추출
wb = openpyxl.load_workbook('customer_data_test.xlsx')
ws = wb['test_name_email']
name_list = []
email_list = []
for row in ws.iter_rows(min_row=2, values_only=True):
name = row[0]
email = row[1]
name_list.append(name)
email_list.append(email)
# Gmail 서버 연결
with smtplib.SMTP(smtp_server, smtp_port) as smtp:
smtp.starttls()
smtp.login(smtp_username, smtp_password)
for name, email in zip(name_list, email_list):
# 메일 제목, 본문 내용 작성
mail_subject = f'[{name}] 자그마한 선물을 받으세요!'
mail_body = f'안녕하세요 {name}님,\n\n저희 앱을 이용해주셔서 감사합니다. {name}님이 우리 앱에 10번 이상 로그인하시면 자그마한 선물을 드립니다! 하루에 최대 1번 로그인 가능합니다. 많은 이용 부탁드립니다.\n\n감사합니다.\n\n- salemale 팀'
# 메일 생성
message = MIMEMultipart()
message['From'] = smtp_username
message['To'] = email
message['Subject'] = mail_subject
# 메일 본문 추가
message.attach(MIMEText(mail_body))
# 메일 전송
smtp.send_message(message)
# 스케쥴러 설정
schedule.every(1).minutes.do(send_email)
while True:
schedule.run_pending()
time.sleep(1)
========================================================================
위 소스 입력 후 코랩을 실행 시켰습니다.
메일은 제가 지정한 수신자 메일 주소로 들어옵니다.
문제는 1분에 한번씩 오지 않는다는것과 아래의 오류 코드가 뜨는데 무엇때문인지 모르겠습니다.
============ 오류 코드 ==========================
SMTPRecipientsRefused Traceback (most recent call last)
<ipython-input-7-1856a1b248cf> in <cell line: 53>()
52
53 while True:
---> 54 schedule.run_pending()
55 time.sleep(1)
6 frames
/usr/local/lib/python3.10/dist-packages/schedule/__init__.py in run_pending()
820 :data:`default scheduler instance <default_scheduler>`.
821 """
--> 822 default_scheduler.run_pending()
823
824
/usr/local/lib/python3.10/dist-packages/schedule/__init__.py in run_pending(self)
98 runnable_jobs = (job for job in self.jobs if job.should_run)
99 for job in sorted(runnable_jobs):
--> 100 self._run_job(job)
101
102 def run_all(self, delay_seconds: int = 0) -> None:
/usr/local/lib/python3.10/dist-packages/schedule/__init__.py in _run_job(self, job)
170
171 def _run_job(self, job: "Job") -> None:
--> 172 ret = job.run()
173 if isinstance(ret, CancelJob) or ret is CancelJob:
174 self.cancel_job(job)
/usr/local/lib/python3.10/dist-packages/schedule/__init__.py in run(self)
691
692 logger.debug("Running job %s", self)
--> 693 ret = self.job_func()
694 self.last_run = datetime.datetime.now()
695 self._schedule_next_run()
<ipython-input-3-1856a1b248cf> in send_email()
46
47 # 메일 전송
---> 48 smtp.send_message(message)
49
50 # 스케쥴러 설정
/usr/lib/python3.10/smtplib.py in send_message(self, msg, from_addr, to_addrs, mail_options, rcpt_options)
984 g.flatten(msg_copy, linesep='\r\n')
985 flatmsg = bytesmsg.getvalue()
--> 986 return self.sendmail(from_addr, to_addrs, flatmsg, mail_options,
987 rcpt_options)
988
/usr/lib/python3.10/smtplib.py in sendmail(self, from_addr, to_addrs, msg, mail_options, rcpt_options)
899 # the server refused all our recipients
900 self._rset()
--> 901 raise SMTPRecipientsRefused(senderrs)
902 (code, resp) = self.data(msg)
903 if code != 250:
SMTPRecipientsRefused: {}
