ACHO.pk devlog

[멋쟁이사자처럼10기] python_SMTP 서버로 메일보내기 본문

멋쟁이사자처럼

[멋쟁이사자처럼10기] python_SMTP 서버로 메일보내기

Acho 2022. 5. 7. 17:54

벌써 멋사 활동한 지 한 달이 지났다. 

역시 지원하길 잘했다는 생각이 든다. 내가 C를 먼저 공부했기 때문에 Python 문법 자체가 매우 생소했는데, 이번 기회에 잘 학습한 것 같다.

 


<Google 보안 수준 변경하기>

1. python 메일 프로그램을 만들기 위해서는, Google(Gmail) 계정이 필요하다.

2. Google 회원가입 후에 프로필 이미지 클릭, 'Google 계정 관리' 버튼을 클릭한다.

3. 좌측 '보안' 탭을 클릭하여 액세스 사용 설정 페이지로 진입한다.

4. '보안 수준이 낮은 앱의 액세스' 섹션에서 ' 액세스 사용 설정(권장하지 않음)' 텍스트를 클릭한다.

5. '보안 수준이 낮은 앱'의 액세스 권한을 허용한다.

이기 때문에 아래 방법으로 하면 된다. 

1. 보안 탭에 들어간다.

2. google에 로그인 섹션에서 2단계 인증을 완료한다.

3. 보안 탭에 들어간다.

4. google에 로그인 섹션에서 앱 비밀번호 인증을 완료한다. 

5. 생성된 앱 비밀번호를 잘 기억해둔다.

bdsaxypgmhhehzdo

 

<Google IMAP 설정하기>

1. Gmail 메인 페이지에 접속한다.

2. 상단 톱니바퀴(설정)를 클릭한다.

3. '모든 설정 보기' 버튼을 클릭한다.

4. 전달 및 POP/IMAP 탭을 클릭한다.

5. IMSP 액세스/상태 값을 'IMAP 사용'으로 변경한다.


SMTP( Simple Mail Transfer Protocol )

간단하게 메일을 보내기 위한 프로토콜

코드라이언 수업 중

a email sever는 우리의 이메일 서버

b email sever는 다른 이메일 서버(우리가 메일을 전송할 상대)

 

IMAP을 통해 다른 이메일 서버에서 보내준 메일이나 우리의 전자 이메일 서버에 저장되어 있는 메일을 우리의 프로그램으로 가져올 수 있다.

 

if) A에게 B에게 이메일을 보내고, B가 A에게 답장한다.

1. A는 SMTP를 이용해서 본인의 이메일 서버에 메일을 저장한다.

2. 이 서버에 저장되어 있는 메일을 SMTP를 이용해서 B 이메일 서버에 보낸다.

3. B 이메일 서버는 IMAP를 이용해서 B에게 전달한다.

4. B는 답장을 한 후에 SMTP를 이용해서 B 이메일 서버에 전달한다.

5. B 이메일 서버는 SMTP를 이용해서 A 이메일 서버에 전달한다.

6. A 이메일 서버는 IMAP를 이용해서 A에게 전달한다.

 


 

 

1. SMTP 메일 서버를 연결한다.

import smtplib

SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465		#gmail에서 지정한 포트 번호

#서버 주소와 Port 번호가 필요함
smtp = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)	 #우리가 원하는 이메일 서버에 연결

print(smtp)

 

보안 문제 때문에 에러 발생

 

* SSL : 아무나 서버에 접근할 수 없도록 하는 암호화 방식

Gmail의 SMTP 서버는 SSL를 필수적으로 요구한다.

smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)

Gmail의 SMTP 서버에 접근 성공

 

 

2. SMTP 메일 서버에 로그인한다.

smtp.login : 해당 계정이 존재하는 지 확인하고, 로그인한다.

#ID, PW가 필요함
smtp.login("####@gmail.com", "발급받은 앱 비밀번호")

로그인 성공

 

3. SMTP 메일 서버로 메일을 보낸다.

#메일의 내용이 필요함, 메일을 보내는 함수임
smtp.send_message()
smtp.quit()

 

MIME(Multipurpose Internet Mail Extensions) : 전자우편을 위한 인터넷 표준 

일반적인 텍스트 파일을 SMTP 서버에 전달할 수 없으니, 이메일 내용을  MIME 형태로 바꿔줘야 한다.

python의 email.message 모듈을 사용하고, .EMailMessage 기능을 사용하면 된다.

 

1. 이메일을 만든다.

from email.message import EmailMessage

2. 이메일에 내용을 담는다.

message = EmailMessage()
message.set_content("멋사 10기 코드라이언 수업 중입니다.")

3. 제목, 발신자, 수신자를 설정한다. ( Header : Subject, From, To )

message["Subject"] = "제목 :  읽고 회신 부탁드립니다."
message["From"] = "###@gmail.com"		#메일을 전송할 계정
message["To"] = "###@gmail.com"		#메일을 받는 계정

메일에 사진 첨부하기

 

rb : read binary

wb : write binary

ab : append binary

 

<파일을 안전하게 열고 닫을 수 있음>

with open("frog.png","rb") as image:
    image_file = image.read()		#파일을 읽어서 출력

add_attachment() :  텍스트가 아닌 다른 파일을 첨부할 때 ( multipart/mixed 타입의 메일 )

1. image : 첨부할 파일의 내용

2. maintype : 첨부한 파일의 유형

3. subtype : 확장자

import imghdr  #이미지의 유형을 판단(python 내장 모듈)

image_type = imghdr.what('frog',image_file)
message.add_attachment(image_file,maintype='image',subtype=image_type)

 

 

<최종 코드>

 

 

GitHub - Acho-mj/Likelion10-study: 멋쟁이 사자처럼 10기 백엔드입니다. 코드라이언과 학교 멋사 스터디

멋쟁이 사자처럼 10기 백엔드입니다. 코드라이언과 학교 멋사 스터디에서 학습한 내용을 올립니다. - GitHub - Acho-mj/Likelion10-study: 멋쟁이 사자처럼 10기 백엔드입니다. 코드라이언과 학교 멋사 스

github.com

Comments