728x90
1. IMAP을 통해 최근 메일을 읽어들임
pip install googletrans==4.0.0-rc1
import imaplib
import email
from email.header import decode_header, make_header
from googletrans import Translator
#####################IMAP을 통해 최근 메일을 읽는 프로그램(참고용)##########################
server = imaplib.IMAP4_SSL('imap.gmail.com') #IMAP4 서버에 암호화하여 접근 / IMAP4는 메일 서버에 저장되어있는 메일에 접근하기 위한 방법
server.login('0000@likelion.org', '0000')
rv, data = server.select()
#select함수 = 메일 서버에 저장된 모든 메일 건수를 알려준다.
#실행결과는 실행 성공 여부 & 메일 건수 두 정보 출력
#rv, data변수에 나눠담기, rv 출력 시 ok 출력, data 출력 시 메일 건수 출력, 우리는 메일 건수만 필요하니까 data만 사용할 것
print(rv)
print(data)
recent_no = data[0]
#가장 최근의 메시지 번호/최근의 메세지 번호는 메일의 건수와 동일하다.
rv, fetched = server.fetch(recent_no, '(RFC822)')
#fetch함수에 두 가지 인자를 전달, 최근 메세지 번호와
#RFC822는 표준 메세지 형식 (중요X)
#fetch 실행결과는 아까처럼 두 가지 변수에 나누어 담았다.
#마찬가지로 rv는 fetch함수가 잘 실행되었다는 정보인 ok가 담김
#가져온 <최근 메일>의 모든 정보는 fetched 변수에 담김
message = email.message_from_bytes(fetched[0][1])
#메세지 내용에 해당하는 부분을 파싱하는 단계
#여기서 우리가 필요한 메일 내용은 fetched의 첫 번째 요소의 두 번째 요소라서 [0][1]로 표현함
#print(fetched[0][1])해보면 엄청 길고 못 알아보는 인자가 출력되는데 이 부분이 우리가 가져와야 할 메일 내용이라는 것만 이해해주시면 됩니다.
#email.message_from_bytes는 우리가 알아볼 수 있는 형태로 바꿔주는 함수
#변환한 내용을 message객체에 담았고 이제 이 객체를 이용해 이메일의 제목, 보낸이, 내용 등을 가져올 수 있게 됨.
fr = make_header(decode_header(message.get('From')))
subject = make_header(decode_header(message.get('Subject')))
#보낸이와 제목은 이메일의 헤더 항목입니다.
#따라서, 이를 정확한 값으로 가져오기 위해 decode_header, make_header함수를 이용했습니다.
2. 메세지 본문 내용만 읽어오기
'''메세지 본문 내용을 구하는 과정입니다. ('''
if message.is_multipart():
for part in message.walk():
ctype = part.get_content_type()
cdispo = str(part.get('Content-Disposition'))
if ctype == 'text/plain' and 'attachment' not in cdispo:
body = part.get_payload(decode=True)
break
else:
body = message.get_payload(decode=True)
body = body.decode('utf-8')
print(f"보낸사람:{fr}")
print(f"제목:{subject}")
3. 번역기 프로그램 만들기
####################################5개 국어 번역기 프로그램##################################################
#1. 번역할 내용은 body변수에 담겨있습니다. 이를 f-string을 이용해 outsourcing에 담아주세요.
outsourcing = f'{body}'
#2. 번역할 내용을 출력해봅시다.
print(outsourcing)
#3. 번역기를 만들어주세요.
translator = Translator()
#4. 5개 국어의 언어 코드를 리스트에 담아주세요.
langlist = ['en','ja','zh-cn','es','fr']
#5. 5개 국어 각각에 대한 결과를 아래와 같이 출력하세요.
for dest in langlist:
result = translator.translate(outsourcing, dest)
detected = translator.detect(outsourcing)
print("===========출 력 결 과===========")
print(detected.lang,":",outsourcing)
print(result.dest,":",result.text)
print("=================================")
#6. "번역한 언어 : 번역한 결과" 형태로 5개 국어로 번역한 결과를 trans 변수에 담아주세요. (딕셔너리, 반복문 사용)
resultdict={}
for dest in langlist:
result = translator.translate(outsourcing,dest)
resultdict[result.dest]=result.text
print(resultdict)
trans = str(resultdict)
4. 번역 결과를 리스트에 저장하여 발송하기
################################번역 결과 이메일 발송####################################
import smtplib #7. smtp메일서버로 메일을 쉽게 보내주는 라이브러리 import
from email.message import EmailMessage #8. 작성하고 싶은 메일 내용을 MIME타입으로 변환해주는 기능 import
'''1. 서버 정보 생성'''
SMTP_SERVER = "smtp.gmail.com" #9. 서버 정보
SMTP_PORT =465 #10. 포트 정보
'''2. MIME 형태의 메세지 통 만들고 번역결과를 메일 내용에 담기'''
message = EmailMessage() #11. 메세지 통을 생성해주세요.
message.set_content(trans) #12. 번역 결과를 메일 내용에 담아주세요.
'''3. 메일의 헤더 작성'''
message["Subject"]="000_0요일팀_성공입니다~!" #13. 제목은 "이름_X요일팀_성공입니다~!"로 설정해주세요.
message["From"]= "hhj04021@likelion.org" #14. 발신자는 본인의 likelion.org 계정을 입력해주세요.
message["To"]=fr #15. 수신자는 앞에서 변수를 찾아서 입력해주세요. (이메일 직접 입력X)
'''4. SMTP서버에 연결하고 계정을 이용해 로그인'''
smtp = smtplib.SMTP_SSL(SMTP_SERVER,SMTP_PORT) #16. 암호화 방식의 smtp함수를 사용해 SMTP서버에 연결해주세요.
smtp.login('0000@likelion.org', '0000')
'''5. 메세지 전송, 전송 후 연결 끊기'''
smtp.send_message(message) #19. 메세지를 전송해주세요.
smtp.quit() #20. 서버와의 연결을 끊어주세요.
server.close()
server.logout()
5. 결과
728x90
'동아리, 스터디, 교육 > 멋쟁이 사자처럼' 카테고리의 다른 글
[해커톤] 여자들이 기획한 해커톤 2022 여기톤 (0) | 2022.09.04 |
---|---|
[멋사 요일별 스터디] 배스킨라빈스 아이스크림 순위 크롤링 하기 (0) | 2022.05.14 |
[멋사 정기 세션] 220501 PYTHON QUIZ (0) | 2022.05.01 |
[멋사🦁] 멋쟁이 사자처럼 in 성신여대, 10기 아기사자가 되다 (0) | 2022.03.21 |