Так что для практики я пробовал написать простую программу для чтения/записи писем из оболочки терминала/python. Моя проблема в том, что всякий раз, когда я пытаюсь ввести неверный ответ, он заканчивает программу, а не возвращается в «главное меню», так сказать. Такая же проблема, когда я пытаюсь дать возможность выйти из программы и попросить пользователя подтвердить, что они хотят выйти. Это мой код:Возврат в «главное меню» для программы мини-электронной почты
import smtplib
import imaplib
import email
print 'Welcome to NhuMail'
print '\n \nPlease enter your login information: \n'
user = raw_input('Email User:')
pw = raw_input("Password:")
def check_mail(user, pw):
# Login to INBOX
imap = imaplib.IMAP4_SSL("imap.gmail.com", 993)
imap.login(user, pw)
imap.select('INBOX')
# Use search(), not status()
status, response = imap.search('INBOX', '(UNSEEN)')
unread_msg_nums = response[0].split()
# Print the count of all unread messages
print '\n\nYou have %s unread messages.' % (len(unread_msg_nums))
def read_mail():
imap = imaplib.IMAP4_SSL("imap.gmail.com", 993)
imap.login(user, pw)
imap.list()
imap.select("inbox")
status, response = imap.search('INBOX', '(UNSEEN)')
unread_msg_nums = response[0].split()
result, data = imap.uid('search', None, "ALL") # search and return uids instead
latest_email_uid = data[0].split()[-1]
result, data = imap.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)
print email_message['To']
print email.utils.parseaddr(email_message['From']) # for parsing "Yuji Tomita" <[email protected]>
email_items = email_message.items()
# print all headers
print email_items[1]
print email_items[2]
print email_items[5]
print '\n'
b = email.message_from_string(raw_email)
if b.is_multipart():
for payload in b.get_payload():
# if payload.is_multipart(): ...
print payload.get_payload()
else:
print b.get_payload()
def new_mail():
from_add = user
to_add = raw_input('Enter TO address:')
msg = raw_input('Enter desired message:')
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(user,pw)
server.sendmail(from_add,to_add,msg)
def exit_mail():
confirm_exit = raw_input('Are you sure you want to exit? (Yes/No):')
server = smtplib.SMTP('smtp.gmail.com:587')
if confirm_exit == 'Yes':
server.quit()
print 'Nice Nhu-ing you! Come again soon :)'
elif confirm_exit == 'No':
return prompt
def mail_options():
prompt = raw_input('Say \'Nhu\' to compose a message \nOR \nSay \'Read\' to read unread message \nOR \nSay \'Escape\' to exit NhuMail: \n')
while True:
if prompt == 'Nhu':
new_mail()
return prompt
elif prompt == 'Read':
read_mail()
return prompt
elif prompt == 'Escape':
exit_mail()
break
else:
print 'You didn\'t enter one of the options!'
return prompt
check_mail(user,pw)
mail_options()
Конечно, программа заканчивается; последняя строка вашего кода - 'mail_options()'. Когда он вернется, программа закончится. Можете ли вы предоставить [MCVE] (http://stackoverflow.com/help/mcve)? – KSFT
Вы когда-нибудь получали трассировку или ошибку? – Zizouz212
Однако в 'mail_options()' существует бесконечный цикл. Но тогда вы можете использовать его только один раз, а затем он «зависает», потому что дополнительных подсказок нет. – Zizouz212