파이썬(Python)

파이썬으로 이메일 보내기 (gmail 예제 해보기)

끄적끄적아무거나 2021. 7. 11. 14:58
반응형

Python으로 Gmail에서 이메일 보내기

 

Gmail을 이용해서 파이썬으로 이메일을 자동으로 보내려고 한다. 우선 기본적인 개념에 대해 설명하자면 smtp라는 이메일을 위한 프로토콜(protocol)이 있다. 이메일을 주고 받을 때 해당 프로토콜에 맞추어 메일 보내야지 컴퓨터나 서버는 문제 없이 읽을 수 있다.

 

파이썬에서는 이러한 프로토콜을 자동으로 지원하는 smtplib 라는 모듈/라이브러리 가 있다. 해당 모듈을 사용하면 프로토콜을 신경 쓰지 않고 보내는 사람, 받는 사람, 참조(CC), 비밀참조(BCC), 제목, 내용 등 실제 이메일 보낼때 필요한 정보만 입력 하면된다. 

 

우선 GMAIL에서 제공하는 smtp 서버에 접속해서 보내야 하는데 smtp 서버에 접속하려면 아이디와 비밀번호가 필요 하다. 비밀번호는 이메일에 사용하기 위해 별도로 하나 만드는것이 보안에 좋다. 비밀번호 만드는 방법은 아래와 같다.

 


GMAIL SMTP 서버 접속용 비밀번호 만들기

 

1. https://myaccount.google.com/ 에 들어가서 구글 계정에 접속한다.

 

2. 보안 -> 2단계 인증 -> 사용 으로 변경한다. 전화번호 인증이 필요하다.

 

3. 앱 비밀번호 도 생성한다. 그리고 만든 앱 비밀번호를 복사해서 향후 사용할 파이썬에서 smtp 서버 접속 시 해당 비밀번호를 사용하면 된다. 

 


파이썬으로 이메일 보내기

 

코드>>

import smtplib
from email.message import EmailMessage

class gmail_sender:
    def __init__(self, sender_email, receiver_email, sender_password, cc_email = "", bcc_email = ""):
        self.s_email = sender_email
        self.r_email = receiver_email
        self.pw = sender_password
        self.server_name = "smtp.gmail.com"
        self.server_port = 587

        self.msg = EmailMessage()
        self.msg["From"] = self.s_email
        self.msg["To"] = self.r_email
        if cc_email != "":
            self.cc_email = cc_email
            self.msg["Cc"] = self.cc_email
        if bcc_email != "":
            self.bcc_email = bcc_email
            self.msg["Bcc"] = self.bcc_email
        self.smtp = smtplib.SMTP(self.server_name, self.server_port)
    
    def msg_set(self, msg_title, msg_body):
        self.msg['Subject'] = msg_title
        self.msg.set_content(msg_body)
    
    def smtp_connect_send(self):
        self.smtp.ehlo()
        self.smtp.starttls()
        self.smtp.login(self.s_email, self.pw)
        self.smtp.send_message(self.msg)        
        
    def smtp_disconnect(self):
        self.smtp.close()

test_email = gmail_sender("sender@gmail.com","receiver@naver.com","your password","cc@yahoo.com")
test_email.msg_set("test_title", "test_msg")
test_email.smtp_connect_send()
test_email.smtp_disconnect()

 

주석>>

위 코드에서 아래 부분 

 

test_email = gmail_sender("sender@gmail.com","receiver@naver.com","your password","cc@yahoo.com")

test_email.msg_set("test_title""test_msg")

 

을 본인 내용으로 변경하면 이메일이 정상적으로 전달 됨을 알 수 있다.

 

코드에 대한 추가 설명을 하자면 server_port는 smtp 포트 번호로 587은 TLS 암호화를 사용하는 포트이고 465는 SSL 암호화를 사용하는 smtp 포트 번호이다. 일반적으로 TLS가 강화된 암호화 방식이라 해당 포트를 사용하였다. 

 

self.smtp.starttls()

 

위 코드로 TLS를 활성화 해주었다. 

 

self.smtp.ehlo()

 

위 코드는 연결을 확인해주는 코드이다. 

 

self.smtp.login(self.s_emailself.pw)

 

서버에 로그인을 하고

 

self.smtp.send_message(self.msg

 

msg 안의 내용을 이메일로 보내는 것이다. msg 사용 법은 코드를 보면 쉽게 이해 될 것이다. msg에 참조 메일, 비밀 참조메일, 보내는 사람이메일 주소, 받는 사람이메일 주소, 내용, 제목 등을 입력 한다.

 

 

 

반응형