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
https://docs.python.org/ko/3/library/re.html
'TIL > Python' 카테고리의 다른 글
파이썬 오늘의 날씨 API (0) | 2022.09.17 |
---|---|
파이썬 자동 번역기능 googletrans (0) | 2022.09.17 |
Python 웹 크롤링 - Beautiful Soup (1) | 2022.09.17 |