Post

db_termproject(16) - seller 기능 구현(2) QnA 답변

python 구현

이번 글에선 QnA 답변 및 SMTP protocol을 사용해서 간략하게 user에게 메일을 보내도록 하는 방법을 알아보겠습니다. 일단 실제로 존재하는 메일 주소로 회원 가입을 진행해주겠습니다. customer는 제 naver 메일 계정으로, seller는 제 구글 계정으로 진행했습니다.

image

빠르게 회원 가입을 했습니다.

image

seller로도 빠르게 가입했습니다.

image

빠르게 customer로 로그인 후, QnA 게시판에 질문을 남겼습니다.

QnA 답변

일단 seller로 로그인 후, 자신의 product_subcode를 조회 후, 선택합니다. 이후 그에 해당하는 질문에 대답을 남기면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def qna_answer(seller_id):
    print("QnA 게시판입니다.")
    cursor = user_con.cursor()
    try :
        print("내가 등록한 품목을 불러옵니다.")
        select_query = f"select * from product_view WHERE product_seller='{seller_id}';"
        cursor.execute(select_query)
        my_product_info = cursor.fetchall()
        columns = [column[0] for column in cursor.description]
        df = pd.DataFrame(my_product_info, columns=columns)
        print(tabulate(df, headers='keys', tablefmt='pretty', showindex=False))

        print("QnA 게시판 불러옵니다..")
        select_query= f"select * FROM qna WHERE seller_id='{seller_id}';"
        cursor.execute(select_query)
        qna_list= cursor.fetchall()
        columns = [column[0] for column in cursor.description]
        df = pd.DataFrame(qna_list, columns=columns)
        print(tabulate(df, headers='keys', tablefmt='pretty', showindex=False))

        qna_num = int(input("답변하고 싶은 QnA num을 입력해주세요 : ").strip())
        answer = input("답변하고 싶은 대답을 입력해주세요 : ").strip()

        update_query =f"UPDATE qna SET answer='{answer}' WHERE qna_num ={qna_num};"
        cursor.execute(update_query)
        user_con.commit()
        print("답변 달았습니다. ")
        mail = input("메일 보내시기 원하시면 1번, 아니면 2번을 눌러주세요 : ").strip()
        if mail=='1':
            send_mail()

    except Exception as e:
        print(f"{e}: 입력 양식을 맞춰주세요")
    print("메인 페이지로 이동합니다.")

image

질문 목록이 잘 불러와집니다. 메일을 보내는 함수를 봐야겠습니다.

메일 보내기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def send_mail():
    title = input("메일 제목을 입력하세요 : ")
    content = input("메일 내용을 입력하세요 : ")

    msg = MIMEText(content)
    msg['Subject'] = title
    print("구글 계정으로 메일을 보냅니다. 구글 계정과 Gmail 앱 비밀번호가 없으시다면 가입 후 사용해주시길 바랍니다.")
    print("Gmail 앱 비밀번호를 발급받는 방법 1단계 : Gmail 홈에서 톱니바퀴 > 빠른 설정 > 모든 설정 보기")
    print("Gmail 앱 비밀번호를 발급받는 방법 2단계 : IMAP 사용하기 설정")
    print("Gmail 앱 비밀번호를 발급받는 방법 3단계 : Google 계정 관리 > 보안 > 2단계 인증")
    print("Gmail 앱 비밀번호를 발급받는 방법 4단계 : 인증 완료 후 OTP 추가")
    print("Gmail 앱 비밀번호를 발급받는 방법 5단계 : 2단계 인증 시작화면으로 들어와서, 앱 비밀번호 설정.")
    print("Gmail 앱 비밀번호를 발급받는 방법 6단계 : 앱 비밀번호 생성 > 기타(맞춤 이름) ")
    print("16자리 우측 상단 기기용 앱 비밀번호를 기억해주세요.")

    # (*)메일의 발신자 메일 주소, 수신자 메일 주소, 앱비밀번호(발신자)

    sender = input("보내는 사람의 구글 계정을 입력해주세요.")
    receiver = input("받는 사람의 구글 계정을 입력해주세요.")
    app_password = input("16자리 앱 비밀번호를 입력해주세요 : ")

    with smtplib.SMTP('smtp.gmail.com', 587) as s:  # TLS 암호화
        s.starttls()
        s.login(sender, app_password)
        s.sendmail(sender, receiver, msg.as_string())
    print("메일 발송이 완료되었습니다.")

image

메일을 보내기 위해서 귀찮지만 앱 비밀번호를 발급받아야 합니다. 제가 상세하게 하는 방법을 써 놨으니 한 번 해보실 분은 해보시길 바랍니다.

image

제가 분명 메일을 받았는데 ‘받는이없음’ 이라고 나오네요.. 구글 계정을 사용하지 않고 naver 계정을 사용해서 그런가봅니다. 아무튼 메일이 잘 발송됨을 확인할 수 있습니다.

마무리하며

customer에 이어서, seller의 기능까지 알아보았습니다. 이제 다음 글에서는 administor에 대해 알아보겠습니다.

This post is licensed under CC BY 4.0 by the author.