개발 블로그

[CODELION 강의] [심화] 같이 푸는 PYTHON - 번역기, 메일 보내기 본문

Programming Language/Python

[CODELION 강의] [심화] 같이 푸는 PYTHON - 번역기, 메일 보내기

draidev 2022. 3. 18. 23:19

  1. BeautifulSoup를 이용한 Crawling
  2. API로 날씨 정보를 가져와서 오늘의 날씨 프로그램
  3. googletrans라이브러리를 활용한 번역기 프로그램
  4. SMTP를 활용한 메일 보내기 프로그램

이번에는 세 번째 '번역기 프로그램', 네 번째 '메일 보내기 프로그램'에 대해 보겠습니다!!

목차>

01_01 googletrans

googletrans는 구글에서 제공하는 파이썬 라이브러리로 번역과 관련된 기능을 제공합니다.
from googletrans import Translator를 추가해주고
translator = Translator()를 통해 번역기를 생성합니다.
translator.detect(text)는 매개변수가 어떤 언어인지 판별해줍니다.
번역 할 언어를 입력할때는 다음주소를 참조합니다 : https://py-googletrans.readthedocs.io/en/latest/
한국어는 ko입니다.

from googletrans import Translator

translator = Translator() # 번역기 생성

text = input("번역을 원하는 문장을 입력해주세요 : ")
destination = input("어떤 언어로 번역을 원하시나요? : ")

result = translator.translate(text,destination)  # 번역기로 번역한 언어를 result에 저장
detected = translator.detect(text)  # 번역할 언어를 감지


print("==========출 력 결 과==========")
print(detected.lang,":",sentence)
print(result.dest,":",result.text)
print("=============================")

출 력 결 과


메일 보내기 프로그램 만들기 전 구글 보안 설정하기

1. 구글Gmail -> 설정 -> See all settings -> Forwarding and POP/IMAP -> Enable IMAP체크

2. 구글 크롬 설정 -> google 계정관리 -> 보안 -> "내 계정이 안전하게 보호됩니다" 클릭 -> 2단계 인증 설정(인증)
-> 맨위에 "사용 안함"
구글 크롬 설정 -> google 계정관리 -> 보안 -> 아래로 쭉 내리면 "보안 수준이 낮은 앱의 액세스"에서 사용으로 설정

Gmail 설정 -> See all settings

 

Enable IMAP

02_01 메일 보내기, SMTP

SMTP(Simple Mail Trasfer Protocol)는 전자 우편을 송신하고 수신하는 데 사용되는 TCP/IP 프로토콜입니다. 일반적으로 POP3 또는 IMAP(Internet Message Access Protocol)와 함께 사용되어 메세지를 서버 메일함에 저장하고 사용자를 위해 서버에서 주기적으로 메세지를 다운로드합니다.

파이썬에서는 smtplib를 import하여 사용합니다.

import smtplib

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

""" smtplib.SMTP() : 우리가 원하는 서버에 연결하는 함수 """
""" smtplib.SMTP_SSL() : 보안처리를 위해 실제로는 SMTP_SSL()을 사용한다 """
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

print(smtp)

SMTP() 출력 오류
SMTP_SSL() 출력

02_02 MIME

MIME는 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록, 서버가 정확히 설정하는 것이 중요합니다. 브라우저들은 리소스를 내려받았을 때 해야 할 기본 동작이 무엇인지를 결정하기 위해 대게 MIME 타입을 사용합니다.

from email.message import EmailMessage 를 추가해줍니다. 그리고 헤더를 작성해줘야 합니다.

Header : 이메일 형식에 대한 정보를 담은 부분

Subject : 제 목
From : 발신자
To : 수신자

import smtplib
from email.message import EmailMessage

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

message = EmailMessage()
message.set_content("안녕하세요. 메일 보내기 코딩 중입니다.")

""" Header에 들어갈 정보들(Subject, From, To) """
message["Subject"] = "이것은 제목입니다."
message["From"] = "#######@gmail.com"
message["To"] = "######@gmail.com" 

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

02_03 이미지 추가

이미지를 첨부해서 메일을 보내려면 아래의 함수를 사용합니다.
add_attachment(image, maintype, subtype ) : 텍스트가 아닌 다른 포맷의 내용을 첨부할 때 사용하는 함수

  • image : 이미지 파일
  • maintype : image인지
  • subtype : 이미지의 확장자
with open("codelion.jpg","rb") as image:
    image_file = image.read()

""" what(파일명, 파일 데이터) """
image_type = imghdr.what('codelion', image_file)
""" add_attachment(이미지, maintype = 파일 형식, subtype = 파일 확장자) """
message.add_attachment(image_file, maintype='image',subtype=image_type)

02_04 정규표현식

정규 표현식 : 문자열에서 나타나는 특정 패턴을 알아내서 대응시키기 위해 사용되는 표현식
^ : 정규표현식의 시작
$ : 정규표현식의 끝)
* : 문자가 0번 이상 반복(즉, 문자가 없어도 True)
+ : 문자가 한 번 이상 반복
{m,n} : 문자가 m번부터 n번까지 반복

""" 정규 표현식 """
import re

reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]{2,3}$"
print(re.match(reg, "drtkdldjstm@gmail.com"))

re.match() 출력

정규 표현식으로 유효한 이메일 형식인지 판단하고 메일을 발송했는지 못했는지 출력해 주는 함수를 작성해 보면 다음과 같습니다.
if문의 조건으로 re.match()의 값을 bool값으로 변환하여 True, False를 판별합니다.

""" 정규 표현식으로 검사한 후 메일을 보내는 함수 """  
def sendEmail(addr):  
    """ 정규 표현식 """  
    reg = "^\[a-zA-Z0-9.+\_-\]+@\[a-zA-Z0-9\]+\\.\[a-zA-Z0-9\]{2,3}$"  
    if bool(re.match(reg, addr)):  
        smtp.send\_message(message)  
        print("정상적으로 메일이 발송되었습니다.")  
    else:  
        print("유효한 이메일 주소가 아닙니다.")
Comments