Quantcast
Channel: sr's lair
Viewing all articles
Browse latest Browse all 688

[python3] smtp 로 여러명에게 이메일 보내기

$
0
0

삽질을 거듭하다가 기록용으로 남깁니다.

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() 함수의 두번째 인수 자리에는 리스트가 들어가야 합니다.

이걸 캐치 못해서 한참을 고생했네요. 누군가에겐 도움이 되시길...


Viewing all articles
Browse latest Browse all 688

Trending Articles