import smtplib
from email.message import EmailMessage
import imghdr
import re

SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465

def sendEmail(addr):
    reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$"
    if bool(re.match(reg,addr)):
        smtp.send_message(message)
        print("정상적으로 메일이 발송되었습니다.")
    else:
        print("유효한 이메일 주소가 아닙니다.")

message = EmailMessage()
message.set_content("코드라이언 수업중입니다.")

message["Subject"] = "이것은 제목입니다."
message["From"] = "###@gmail.com"
message["To"] = "###@gmail.com"

with open("codelion.png","rb") as image:
    image_file = image.read()

image_type = imghdr.what('codelion',image_file)
message.add_attachment(image_file,maintype='image',subtype=image_type)

smtp = smtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)
smtp.login("###@gmail.com","######")
# 메일을 보내는 sendEmail 함수를 호출해서 실행해보기
sendEmail("###@gmail.com")
smtp.quit()

이번에는 SMTP 클라이언트 모듈을 사용해 이메일 발송기능을 파이썬을 통해 구현해 보겠습니다.

해당 코드는 Gmail 을 기준으로 작성되었습니다.

import smtplib
from email.message import EmailMessage
import imghdr
import re

먼저 필요한 모듈을 불러옵니다. 불러온 모듈들은 다음과 같습니다.

  • smtplib : 이메일을 보내기 위한 클라이언트 모듈
  • EmailMessage : 이메일 정보 객체
  • imghdr : 이미지 파일의 형식을 판별하는 모듈
  • re : 정규표현식 모듈

다음으로 email을 송신하는 서버와 SSL 보안 연결을 위한 포트번호를 정의해줍니다.

SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465

여기서 SSL은 컴퓨터 네트워크 상에서 데이터 통신의 보안을 제공하기 위한 암호화 프로토콜 입니다.

다음으로 email 객체를 생성해 내용, 제목, 송신자, 수신자를 설정하여 줍니다.

message = EmailMessage()
message.set_content("코드라이언 수업중입니다.")

message["Subject"] = "이것은 제목입니다."
message["From"] = "###@gmail.com"
message["To"] = "###@gmail.com"

메일에 추가적으로 이미지를 첨부할시 다음과 같이 코드를 추가합니다.

with open("codelion.png","rb") as image:
    image_file = image.read()

image_type = imghdr.what('codelion',image_file)
message.add_attachment(image_file,maintype='image',subtype=image_type)

해당 codelion.png 이미지 파일을 rb (바이너리 읽기) 모드 로 열고 해당 이미지의 바이너리 값과 imghdr 로 해당 이미지에 대한 타입을 얻습니다.

그 뒤에, email 객체에 해당 바이너리 값과 이미지 파일의 형식을 인자로 제공해 첨부합니다.

smtp = smtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT)
smtp.login("###@gmail.com","######")

다음으로 smtp 서버에 ssl 보안 연결을 설정하여 smtp 객체를 생성하고 해당 서버의 계정으로 로그인 합니다.

마지막으로 정규 표현식으로 이메일 주소를 확인 한 뒤에, 정상적으로 송신하게 됩니다.

def sendEmail(addr):
    reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$"
    if bool(re.match(reg,addr)):
        smtp.send_message(message)
        print("정상적으로 메일이 발송되었습니다.")
    else:
        print("유효한 이메일 주소가 아닙니다.")

참고 문서

 

https://docs.python.org/ko/3/library/smtplib.html

 

smtplib — SMTP protocol client

Source code: Lib/smtplib.py The smtplib module defines an SMTP client session object that can be used to send mail to any internet machine with an SMTP or ESMTP listener daemon. For details of SMTP...

docs.python.org

https://docs.python.org/ko/3/library/re.html

 

re — Regular expression operations

Source code: Lib/re/ This module provides regular expression matching operations similar to those found in Perl. Both patterns and strings to be searched can be Unicode strings ( str) as well as 8-...

docs.python.org

 

'TIL > Python' 카테고리의 다른 글

파이썬 오늘의 날씨 API  (0) 2022.09.17
파이썬 자동 번역기능 googletrans  (0) 2022.09.17
Python 웹 크롤링 - Beautiful Soup  (1) 2022.09.17

+ Recent posts