1. 메일 보내기
- 구글 계정을 이용해 메일을 보내는 프로그램을 작성
IMAP 사용 설정
1. 구글 보안 수준 변경하기
- 계정 관리 - 보안 탭 - 보안 수준이 낮은 앱의 액세스 허용
2. 구글 IMAP 설정하기
- Gmail 설정 - 전달 및 POP/IMAP 탭 - IMAP 액세스/상태 값을 ‘사용’으로 변경
2. SMTP
- STMP 서버를 이용해 우리가 원하는 곳으로 메일을 보낼 수 있음
- SMTP 메일 서버를 연결
- SMTP 메일 서버에 로그인
- SMTP 메일 서버로 메일을 보냄
1
2
3
4
5
6
7
8
| import smtplib
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) # 서버주소와 포트번호
print(smtp)
|
1
| <smtplib.SMTP_SSL object at 0x000002965B13AC40>
|
SMTP
함수를 사용하면 SMTPServerDisconnected: Connection unexpectedly closed
에러 발생
- 보안 연결(SSL)만 허용하는데 일반 연결을 시도할 경우 발생
STMP
함수가 아닌 SMTP_SSL
함수로 해결 가능
1
2
3
4
5
6
7
8
9
10
11
| import smtplib
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
correct_pw = smtp.login("올바른 아이디", "올바른 비밀번호")
wrong_pw = smtp.login("올바른 아이디", "잘못된 비밀번호")
print(correct_pw)
print(wrong_pw)
|
1
2
| (235, b'2.7.0 Accepted')
(503, b'5.5.1 MAIL first. b4-20020a170902650400b0015e8d4eb1dcsm7334212plk.38 - gsmtp')
|
3. MINE
- 일반적인 텍스트 파일은 SMTP로 넘길 수 없음
- MINE 형태로 변환해 넘겨줘야 함
- MINE 형태를 만드는 방법은 다양하나, email.message 모듈을 사용
- 이메일을 만든다
- 이메일에 내용을 담는다
- 발신자, 수신자를 설정한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| import smtplib
from email.message import EmailMessage
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
# 1 이메일을 만든다
message = EmailMessage()
# 2 이메일에 내용을 담는다
message.set_content("내용") # 이메일을 보냈을때 본문에 나타나는 부분
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("올바른 아이디", "올바른 비밀번호")
smtp.send_message()
|
- Subject: 제목
- From: 발신자
- To: 수신자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import smtplib
from email.message import EmailMessage
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
# 1 이메일을 만든다
message = EmailMessage()
# 2 이메일에 내용을 담는다
message.set_content("내용") # 이메일을 보냈을때 본문에 나타나는 부분
# 3
message["Subject"] = "이것은 제목입니다."
message["From"] = "발신 메일"
message["To"] = "수신 메일"
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("발신 메일", "비밀번호")
smtp.send_message()
|
5. 메일 전송하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| import smtplib
from email.message import EmailMessage
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
message = EmailMessage()
message.set_content("내용")
message["Subject"] = "이것은 제목입니다."
message["From"] = "발신 메일"
message["To"] = "수신 메일"
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("발신 메일", "비밀번호")
smtp.send_message(message)
smtp.quit()
|
1
2
| (221,
b'2.0.0 closing connection p23-20020a637f57000000b003c14af5062fsm14375391pgn.71 - gsmtp')
|
6. 사진 첨부하기
|이름|설명| |—|—| |rb|read binary| |wb|write binary| |ab|append binary|
with
1
2
| with open("파일 이름", "모드") as 파일 변수:
변수 = 파일변수.read()
|
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
| import smtplib
from email.message import EmailMessage
import imghdr # 이미지의 확장자를 판단해줌
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
message = EmailMessage()
message.set_content("내용")
message["Subject"] = "이것은 제목입니다."
message["From"] = "발신 메일"
message["To"] = "수신 메일"
with open("파일 이름", "rb") as image:
image_file = image.read()
image_type = imghdr.what("mail_image", image_file)
# message.add_attachment(image_file, maintype='image', subtype='jpg') # image, maintype, subtype
message.add_attachment(image_file, maintype='image', subtype=image_type)
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("발신 메일", "비밀번호")
smtp.send_message(message)
smtp.quit()
|
7. 유효성 검사하기
우리가 보내고자하는 주소가 진짜 이메일이 맞는지 확인 -> 정규표현식
정규표현식
- 문자열에서 나타나는 특정한 패턴을 확인
- 이메일의 경우:
^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$
^
: 정규표현식 시작$
: 정규표현식 끝[a-zA-Z0-9.+_-]
: a~ A~Z 0~9 . + _ -+
: 가 1회 이상 반복된다@
: @가 붙는다\.
: 그 뒤에 .이 붙는다{2,3}
: 가 최소 2회, 최대 3번 반복된다
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
35
36
37
| import smtplib
from email.message import EmailMessage
import imghdr
import re # 정규표현식을 위한 모듈
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 465
def sendEmail(addr):
reg = "^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$"
if bool(re.match(reg, addr)):
smtp.send_message(message)
print("정상적으로 메일이 발송되었습니다.")
else:
print("유효한 이메일 주소가 아닙니다.")
message = EmailMessage()
message.set_content("내용")
message["Subject"] = "이것은 제목입니다."
message["From"] = "발신 메일"
message["To"] = "수신 메일"
with open("파일 이름", "rb") as image:
image_file = image.read()
image_type = imghdr.what("mail_image", image_file)
# message.add_attachment(image_file, maintype='image', subtype='jpg') # image, maintype, subtype
message.add_attachment(image_file, maintype='image', subtype=image_type)
smtp = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)
smtp.login("발신 이메일", "비밀번호")
sendEmail("수신 이메일")
smtp.quit()
|
Comments powered by Disqus.