프로그래밍 언어&프레임워크/python

파이썬으로 이메일 보내기(SMTP)

Coblin 2021. 8. 2. 01:11
반응형

SMTP란?

SMTP 메일 발송 요청을 처리하는 서버이다. SMTP Simple Mail Transfer Protocol 약자로, 이메일을 주고 받는 표준적인 약속 체계나 규약을 의미한다. SMTP 메일 발송을 위한 프로토콜이라면, IMAP 메일 수신을 위한 프로토콜이라 있다. MIME(Multipurpose Internet Mail Extensions) 메일 작성을 위한 표준적인 형식을 의미한다. 메일 전송을 요청할 , 서버가 이해할 있도록 MIME형식으로 메일을 작성해야 한다.

사용방법

파이썬으로 메일을 작성할때는 별도의 라이브러리가 필요하지 않으며, Smtplib라는 기본 라이브러리를 사용합니다.

Smtplib는 Smtp를 사용할 때 필요한 모듈로, 파이썬 설치시 기본적으로 내장되어있는 모듈입니다.

 

사용하시는 메일을 접속하여 smtp 설정을 해주셔야 해당 계정으로 메일을 작성할 수 있습니다.

# 코드블럭에 삽입하다보니 인덴트가 어긋날수 있습니다. 참고해주세요!

import smtplib
from email.mime.text import MIMEText # 메일 제목과 내용을 설정하는 모듈

1. SMTP 서버 연결
stmp = smtplib.SMTP('smtp server url', prot)

2. TLS 암호화
# SMTP 서버의 포트에 연결할 때 TLS(전송 계층 보안) 암호화를 해주어야 한다.
smtp = smtp.starttls() 

3. 로그인
# SMTP서버로 암호화된 연결을 설정하고 로그인 인증이 필요합니다.
# SMTP 설정을 한 메일 계정을 입력합니다.
smtp.login('id', 'password')

4. 메일 제목 및 내용 작성
msg = MIMEText('본문내용입니다.')
msg['Subject'] = '메일 제목입니다.'

5. 메일 보내기
smtp.sendmail(from_address, to_address, msg, mail_options) 

6. 연결 종료
# 모든 작업을 마친 후 1번에서 연결한 SMTP 서버와 연결을 종료합니다.
smtp.quit()

예제코드

# 코드블럭에 삽입하다보니 인덴트가 어긋날수 있습니다. 참고해주세요!
import smtplib
from email.mime.text import MIMEText

print('네이버 또는 구글 메일만 사용 가능합니다.')
sender_id = input('메일을 보낼 계정을 입력해 주세요: ')
print('='*50)
sender_pw = input('계정 비밀번호를 입력해 주세요: ')
print('='*50)
if 'naver' in sender_id:
	smtp_server = "smtp.naver.com"
elif 'google' in sender_id:
    smtp_server = "smtp.google.com"
else:
    print('네이버 또는 구글 메일만 사용 가능합니다.\n메일 주소를 확인해 주세요')
    raise Exception('네이버 또는 구글 메일만 사용 가능합니다.')

smtp_info = {
    "smtp_server": smtp_server,  # SMTP 서버 주소
    "smtp_user_id": sender_id,
    "smtp_user_pw": sender_pw,
    "smtp_port": 587 # SMTP 서버 포트
    }

to = input('받는 분 메일 주소를 입력해 주세요\n여러명일경우 ,로 구분됩니다.\nex)test@test.com, test2@test.com\n')
print('='*50)
title = input('메일 제목을 입력해 주세요\n')
print('='*50)
        
# 메일 내용이 몇줄이 들어갈지 모르기 때문에 무한반복으로 데이터를 인풋받아 리스트에 넣어줌
content = []
print('메일 내용을 작성해 주세요\n 작성 완료시 숫자 0을 입력해주세요.')
i = 0
while(True):
    i += 1
    data = input(f'{i}번째 라인: ')
    if data == '0':
    	break
    else:
    	content.append(data)
print('='*50)
# 리스트로 받은 content를 \n로 조인하여 줄바꿈
msg = MIMEText('\n'.join(content),_charset="utf8")

msg['Subject'] = title  # 메일 제목
msg['From'] = smtp_info['smtp_user_id']  # 송신자
msg['To'] = to
        
smtp = smtplib.SMTP(smtp_info['smtp_server'], smtp_info['smtp_port'])
smtp.ehlo
smtp.starttls()  # TLS 보안 처리
smtp.login(sender_id , sender_pw)  # 로그인
        
smtp.sendmail(msg['From'], msg['To'].split(','), msg.as_string())

smtp.quit()
print('메일을 성공적으로 보냈습니다.')

 

반응형