728x90
반응형
SMALL
ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글([프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 2.음성으로 이메일 보내기 - 수신자편)에 이은 4번째 글로 음성으로 메일을 보내기 위해 두번째로 제목을 설정하는 방법에 대하여 살펴보겠습니다.
O 완성된 프로그램 실행 화면
- 본 포스팅의 최종 완성된 프로그램의 결과화면은 아래와 같습니다.
1.프로그램을 실행하면 아래와 같이 실행 되며, 메일 제목을 정확히 말하면 프로그램이 정상 종료됩니다.
2.메일 제목을 잘못 말한 경우 다시 입력 받도록 하고 있습니다.
ㅁ 세부 내용
O 완성된 소스
소스 : 3.py
# -*- coding: utf-8 -*-
import smtplib
from email.encoders import encode_base64
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
import os
import speech_recognition as sr
from gtts import gTTS
import os
import playsound
from translate import Translator
from config import *
emailpw = EMAILPW
def textToVoice(text):
tts = gTTS(text=text, lang='ko')
filename='voice.mp3'
tts.save(filename) # 파일을 만들고,
playsound.playsound(filename) # 해당 음성파일을 실행(즉, 음성을 말함)
os.remove(filename)
def voiceToText():
r = sr.Recognizer()
with sr.Microphone() as source:
print("say something: ")
audio = r.listen(source)
said = " "
try:
said = r.recognize_google(audio, language="ko-KR")
print("Your speech thinks like: ", said)
except Exception as e:
print("Exception: " + str(e))
return said
def send_email():
################################################################
# 2. 이메일 발송
################################################################
msg = MIMEMultipart()
emailList = 'pygichacha@gmail.com,secuhelper@naver.com'
emailTitle = '음성 메일보내기 테스트'
emailContent = '음성 메일보내기 테스트 입니다.'
msg['From'] = 'secuhelper@naver.com'
msg['To'] = emailList
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = Header(s=emailTitle, charset='utf-8')
body = MIMEText(emailContent, _charset='utf-8')
msg.attach(body)
mailServer = smtplib.SMTP_SSL('smtp.naver.com')
debugMessage = mailServer.set_debuglevel(True)
print(debugMessage, type(debugMessage)) # 디버그 메시지에 'retcode (221)' 가 포함되어 있으면 정상 발송한 것임
mailServer.login('secuhelper@naver.com', emailpw) # 본인 계정과 비밀번호 사용.
mailServer.send_message(msg)
mailServer.quit()
def input_email_recipients():
global email_recipients,for_break
print("이메일을 받는 사람의 이름을 알려주세요.")
textToVoice("이메일을 받는 사람의 이름을 알려주세요.")
my_res = voiceToText()
for key in emaildic.keys():
print(key,"++++++++++++++++++++++++++++++++++++++")
if key in my_res:
# if "홍길동" in my_res:
print("이메일을 받는 사람이 "+key+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
textToVoice("이메일을 받는 사람이 "+key+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
my_res2 = voiceToText()
if my_res2 == "yes" or my_res2 == "예스":
print("이메일을 받는사람에 "+key+" 로 저장하고, 이메일 제목 단계로 이동 합니다.")
textToVoice("이메일을 받는사람에 "+key+" 로 저장하고, 이메일 제목 단계로 이동 합니다.")
email_recipients = key
for_break = False
break
else:
print("이메일을 받는사람이 잘못 지정되었습니다. 다시 입력합니다.")
textToVoice("이메일을 받는사람이 잘못 지정되었습니다. 다시 입력합니다.")
input_email_recipients()
def input_email_title():
global email_title
print("이메일 제목을 알려주세요.")
textToVoice("이메일 제목을 알려주세요.")
my_res = voiceToText()
if '굿바이' in my_res:
print("음성 이메일 시스템을 종료합니다.")
textToVoice("음성 이메일 시스템을 종료합니다.")
print("이메일 제목이 "+my_res+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
textToVoice("이메일 제목이 "+my_res+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
my_res2 = voiceToText()
if my_res2 == "yes" or my_res2 == "예스":
print("이메일 제목을 "+my_res+" 로 저장하고, 이메일 본문 작성 단계로 이동 합니다.")
textToVoice("이메일 제목을 "+my_res+" 로 저장하고, 이메일 본문 작성 단계로 이동 합니다.")
email_title = my_res
else:
print("이메일 제목이 잘못 지정되었습니다. 다시 입력합니다.")
textToVoice("이메일 제목이 잘못 지정되었습니다. 다시 입력합니다.")
input_email_title()
emaildic = {'홍길동':'pygichacha@gmail.com','백두산':'secuhelper@naver.com'}
# ######################## 1.이메일 수신자 받기 시작 ########################
# email_recipients = False #이메일 수신자가 처음엔 지징되어 있지않음
# for_break = True
# while True:
# if email_recipients: #이메일 수신자가 지징되어 있으면 루프를 빠져나옴
# break
# if for_break == False: # 이중 루프를 빠져나가기 위한 변수 설정임
# break
# print("이메일 시스템을 종료하려면 '굿바이'라고 말씀해 주세요.")
# textToVoice("이메일 시스템을 종료하려면 '굿바이'라고 말씀해 주세요.")
# print("이메일을 받는 사람의 이름을 알려주세요.")
# textToVoice("이메일을 받는 사람의 이름을 알려주세요.")
# my_res = voiceToText()
# if '굿바이' in my_res:
# print("음성 이메일 시스템을 종료합니다.")
# textToVoice("음성 이메일 시스템을 종료합니다.")
# break
# for key in emaildic.keys():
# if '굿바이' in my_res:
# print("음성 이메일 시스템을 종료합니다.2")
# textToVoice("음성 이메일 시스템을 종료합니다.2")
# for_break = False
# break
# print(key,"++++++++++++++++++++++++++++++++++++++")
# if key in my_res:
# # if "홍길동" in my_res:
# print("이메일을 받는 사람이 "+key+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
# textToVoice("이메일을 받는 사람이 "+key+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
# my_res2 = voiceToText()
# if my_res2 == "yes" or my_res2 == "예스":
# print("이메일을 받는사람에 "+key+" 로 저장하고, 이메일 제목 단계로 이동 합니다.")
# textToVoice("이메일을 받는사람에 "+key+" 로 저장하고, 이메일 제목 단계로 이동 합니다.")
# email_recipients = key
# for_break = False
# break
# else:
# print("이메일을 받는사람이 잘못 지정되었습니다. 다시 입력합니다.")
# textToVoice("이메일을 받는사람이 잘못 지정되었습니다. 다시 입력합니다.")
# input_email_recipients()
# ######################## 1.이메일 수신자 받기 끝 ########################
######################## 2.이메일 제목 받기 시작 ########################
email_title = False #이메일 수신자가 처음엔 지징되어 있지않음
for_break = True
while True:
if email_title: #이메일 제목이 지징되어 있으면 루프를 빠져나옴
break
if for_break == False: # 이중 루프를 빠져나가기 위한 변수 설정임
break
print("이메일 제목을 알려주세요.")
textToVoice("이메일 제목을 알려주세요.")
my_res = voiceToText()
if '굿바이' in my_res:
print("음성 이메일 시스템을 종료합니다.")
textToVoice("음성 이메일 시스템을 종료합니다.")
break
# 제목: 음성으로 이메일 보내기
print("이메일 제목이 "+my_res+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
textToVoice("이메일 제목이 "+my_res+" 이 맞습니까? 맞으면 yes, 아니면 no로 대답해 주세요.")
my_res2 = voiceToText()
if my_res2 == "yes" or my_res2 == "예스":
print("이메일 제목을 "+my_res+" 로 저장하고, 이메일 본문 작성 단계로 이동 합니다.")
textToVoice("이메일 제목을 "+my_res+" 로 저장하고, 이메일 본문 작성 단계로 이동 합니다.")
email_title = my_res
break
else:
print("이메일 제목이 잘못 지정되었습니다. 다시 입력합니다.")
textToVoice("이메일 제목이 잘못 지정되었습니다. 다시 입력합니다.")
input_email_title()
######################## 2.이메일 제목 받기 끝 ########################
- 소스파일을 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
> python 3.py
O 주요 내용
-아래 소스코드에 대해서 간략히 설명합니다.
(대부분의 내용은 이전 글과 동일하며 다른 주요 부분만 설명합니다.)
1.메일 제목을 입력받는 함수 입니다.
제목을 잘못 말한 경우 다시 받을 수 있도록 함수 형태로 만들어 둔 것일 뿐 특별한 내용은 없습니다.
2. 마찬가지로 이전 내용과 동일합니다.
다만, 수신자의 경우 여러명이 존재하므로 키/벨류 구조를 사용하였지만, 제목은 하나만 작성하면 되므로 단순 구조를 사용하며, 굳이 이중 루프를 사용할 필요가 없습니다.
ㅁ 정리
O 우리가 배운 내용
- 오늘은 음성으로 메일을 보내기 위해 두번째로 제목을 설정하는 방법에 대하여 알아보았습니다.
오늘은 여기까지이며, 댓글과 하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.
위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.
감사합니다.
728x90
반응형
LIST
'파이썬 프로젝트 및 응용 > 몸이불편한 분들을 위한 음성 이메일 보내기' 카테고리의 다른 글
[프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 5.음성으로 이메일 보내기 - 종합편 (0) | 2023.06.24 |
---|---|
[프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 4.음성으로 이메일 보내기 - 본문편 (0) | 2023.06.24 |
[프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 2.음성으로 이메일 보내기 - 수신자편 (0) | 2023.06.24 |
[프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 1.이메일 보내기 (0) | 2023.06.24 |
[프로젝트] 파이썬 몸이불편한 분들을 위한 음성 이메일 보내기 - 0.소개편 (0) | 2023.06.24 |