Linux, ML/DL, DevOps, 클라우드

[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