삽질을 거듭하다가 기록용으로 남깁니다.
def smtphandler(self):
smtp = None
mailconfig = self.config['primaryServer']
if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']:
mailconfig = self.config['secondaryServer']
if 'smtp/starttls':
smtp = smtplib.SMTP('smtp.gmail.com', 587)
elif 'ssl/tls':
smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)
try:
if 'smtp/starttls':
print(f'\tSay hello to {mailconfig["server"]}')
smtp.ehlo()
print(f'\tStarting TLS...')
smtp.starttls()
print('\tTries to log in...')
smtp.login('s@gmail.com', 'gmail_password')
except smtplib.SMTPException as e:
print (f'Error: unable to connect to email server smtp.gmail.com:587...{e}')
pass
except Exception as e:
print(f"Unknown error: {e}")
msg = MIMEText('real content'.encode('utf-8'), _charset='UTF-8')
msg['Subject'] = 'test subject'
msg['To'] = 'b@gmail.com, c@gmail.com, d@gmail.com'
try:
smtp.sendmail('s@gmail.com', msg['To'].split(','), msg.as_string())
except smtplib.SMTPException as e:
print(f"Error: failed to send message {msg.as_string()} to smtp.gmail.com")
print ('\tSending email is done!')
smtp.quit()
뭔가 코드가 길고 복잡해 보이는데 핵심은 msg['To'] 와 smtp.sendmail() 함수의 두번째 인수인 msg['To'].split(',') 입니다.
msg 는 일반 텍스트 형태로 To를 포함하고 있어야 하고, sendmail() 함수의 두번째 인수 자리에는 리스트가 들어가야 합니다.
이걸 캐치 못해서 한참을 고생했네요. 누군가에겐 도움이 되시길...
'IT > python' 카테고리의 다른 글
[python] 소켓이 사용중인 포트 확인하기 (0) | 2021.02.09 |
---|---|
[python] json.dumps object of type bytes is not json serializable (0) | 2020.12.22 |
변수 범위 이해가 안감.. (0) | 2020.11.27 |
유니코드 문자열을 숫자로 변환했다가 복원하기 (0) | 2020.10.26 |
[python]오류 발생시 호출 스택 출력하기 (0) | 2020.09.28 |