goodthings4me.tistory.com
[출처] [나도코딩] 파이썬 코딩 무료 강의 (활용편4) - 업무자동화(RPA), 이제는 일하는 척(?)만 하세요 https://youtu.be/exgO1LFl9x8
■ 이메일 환경 설정 - 구글 G메일 설정
#1. Google 계정관리 > 보안 > Google에 로그인 '2단계 인증' 사용으로 전환
#2. 앱 비밀번호 설정 : 앱 선택(메일) > 기기 선택(Windows 컴퓨터)
import smtplib
from account import * # 계정이 있는 모듈(파일) import
# EMAIL_ADDRESS = 'apaqueen123@gmail.com'
# EMAIL_PASSWORD = '앱 비밀번호 '
from email.message import EmailMessage
### 간단하게 메일 보내는 방법 - 한글 안됨
with smtplib.SMTP('smtp.gmail.com', 587) as smtp: # smtp 객체 생성
smtp.ehlo() # smtp 연결이 잘 수립되는지 확인
smtp.starttls() # 모든 내용이 암호화되어 전송
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 로그인
subject = 'test mail' # 메일 제목
body = 'mail body' # 메일 본문
msg = f'Subject: {subject}\n{body}'
# 보내기 smtp.sendmail(From, To, Msg) 발신자, 수신자, 정해진 형식의 메시지
smtp.sendmail(EMAIL_ADDRESS, 'parkbaeda@gmail.com', msg)
### 메일 보내기 고급
msg = EmailMessage() # 객체 생성
# msg['To'] = 'abc123@gmail.com' # 받는 사람
# msg['To'] = 'abc123@gmail.com, wook123@nate.com, goto123@naver.com' # 여러 사람
#---- 리스트나 엑셀로 메일을 관리하는 경우
to_list = ['abc123@gmail.com, wook123@nate.com, goo123@naver.com, hajo@yahoo.com']
msg['To'] = ', '.join(to_list)
# msg['Cc'] = 'webmater@naver.com' # 참조
# msg['Bcc'] = 'secret@daum.net' # 비밀 참조
msg['Subject'] = '테스트 메일입니다...' # 제목
msg['From'] = account.EMAIL_ADDRESS # 보내는 사람
msg.set_content('테스트로 보내는 본문입니다...') # 본문 내용
## 첨부 파일 같이 보내기 msg.add_attachment()
# MIME TYPE 지정 필요 - https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
# maintype/subtype --> text/plain image/png image/jpeg application/pdf application/zip
# application/msword application/vnd.ms-powerpoint application/vnd.ms-excel application/octet-stream
with open('./email/메일홍보_1.png', 'rb') as f:
msg.add_attachment(f.read(), maintype='image', subtype='png', filename=f.name)
with open('./email/메일홍보.pdf', 'rb') as f:
msg.add_attachment(f.read(), maintype='application', subtype='pdf', filename=f.name)
with open('./email/메일홍보리스트.xlsx', 'rb') as f:
msg.add_attachment(f.read(), maintype='application', subtype='octet-stream', filename=f.name)
with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
smtp.ehlo()
smtp.starttls()
smtp.login(account.EMAIL_ADDRESS, account.EMAIL_PASSWORD)
smtp.send_message(msg)
print('발송 완료!')
### 메일 수신 - imap은 불편, imap-tools 사용 pip install imap-tools
from imap_tools import MailBox
mailbox = MailBox('imap.gmail.com', 993) # 객체 생성
mailbox.login(EMAIL_ADDRESS, EMAIL_PASSWORD, initial_folder='INBOX') # INBOX = 받은편지함
# fetch() 하면 전체 메일, limit=1은 한 개 한정, reverse=True는 최근 메일부터(기본은 False)
for msg in mailbox.fetch(limit=1, reverse=True):
print('제목:', msg.subject)
print('발신자:', msg.from_)
print('수신자:', msg.to)
print('참조자:', msg.cc)
print('비밀참조자:', msg.bcc)
print('날짜:', msg.date)
print('본문:', msg.text)
print('HTML 메시지:', msg.html)
print('=' * 50)
# 첨부 파일 가져오기 - 다운로드
for att in msg.attachments:
print('첨부파일 이름:', att.filename)
print('타입:', att.content_type)
print('크기:', att.size)
# 파일 다운로드
with open(att.filename, 'wb') as f:
f.write(att.payload) # payload는 파일명에 첨부 파일 쓰기
print(f'첨부 파일 {att.filename} 다운로드 완료!')
mailbox.logout()
■ 엑셀에서 이메일을 하나씩 불러온 후 홍보 자료 전송해보기
## wooksung_imentor.py
body_content ='''
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div style="background-color:#eee;padding:10px 20px;">
언택트 시대에 필요한 소프트웨어 및 하드웨어 기반 고급 화상회의 시스템
<h1 style="font-family:Georgia, 'Times New Roman', Times, serif;color:blue;font-weight:bold;">'화상회의(원격교육) 솔루션 - iMentor' <span style="font-size:18px">소개</span> </h1>
</div>
<div style="padding:20px 20px">
<div style="width: 900px;">
<!-- <img src="" style="width: 900px;"> -->
<div style="text-align:left">
<h2>▣ 'iMentor'는</h2>
<ul>
<li style="padding: 5px;font-size:16px;">화상회의 전용 하드웨어 코덱(셋톱박스)와 PC, 노트북, 스마트폰 등으로 구성(하이브리드 형태의 화상회의)</li>
<li style="padding: 5px;font-size:16px;">화상회의, 원격교육 재택근무 시 PC(또는 노트북) 입력으로 파워포인트, 워드 등의 문서 화면공유 가능</li>
<li style="padding: 5px;font-size:16px;">문서카메라로 오프라인 문서(책, 인쇄자료, 수기자료 등)를 양측이 화상으로 동시에 보며 설명할 수 있음</li>
<li style="padding: 5px;font-size:16px;">기업의 다자간 회의, 지점(지사) 간 미팅, 대리점(체인점) 교육 및 세미나 등 다양한 분야에서 활용 가능</li>
<li style="padding: 5px;font-size:16px;">자세한 사항은 <a href="http://wooksungmedia.com/bbs/content.php?co_id=b1"
target="_blank">홈페이지 iMentor 제폼 소개</a> 참조</li>
</ul>
<h2>▣ 'iMentor'를 만든 곳은</h2>
<ul>
<li style="padding: 5px;font-size:16px;">ETRI 연구원 창업 기업으로 국내 유일의 전용 화상 장비(H/W코덱 방식) 개발뿐만 아니라</li>
<li style="padding: 5px;font-size:16px;">PC/노트북/스마트폰 등의 웹 브라우저로 동시에 접속(SW코덱 방식)할 수 있는</li>
<li style="padding: 5px;font-size:16px;">하이브리드형 화상회의(원격교육, 재택근무) 서비스를 제공하는 기업입니다.</li>
</ul>
<table style="padding:20px 10px;border-collapse:collapse;border-spacing:0;">
<tr><td colspan="2"><hr></td></tr>
<tr>
<td style="border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:18px;
overflow:hidden;padding:10px 15px;word-break:normal;text-align:center;vertical-align:center;">(주)욱성미디어<br />
<span style="font-size:14px;text-align:center;"><a href="http://www.wooksungmedia.com" target="_blank">http://www.wooksungmedia.com</a></span>
</td>
<td style="border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:16px;
overflow:hidden;padding:10px 15px;word-break:normal;text-align:left;vertical-align:top;">
<span style="font-size:14px">⊙전화문의: 010-2825-1908 / 042-931-5025 / 070-7729-5000</span><br />
<span style="font-size:14px">⊙E-mail: pkjuls@wooksungmedia.com</span><br />
<span style="font-size:14px">⊙주소: 대전광역시 유성구 테크노2로 340(원플러스 2층)</span><br />
</td>
</tr>
</table>
</div>
</div>
</div>
</body>
</html>
'''
import smtplib
from email.message import EmailMessage
import openpyxl
import time
import random
import account
import wooksung_imentor
def email_sender(email, cnt):
result = ''
try:
msg = EmailMessage() # 객체 생성
msg['To'] = email
msg['Subject'] = '화상회의(원격교육) 솔루션 - iMentor 소개'
msg['From'] = account.EMAIL_ADDRESS
### 본문 내용 작성 방법 ----------------------------------------
## 1.직접 작성
# body_content = '''
# 언택트 시대에 필요한 소프트웨어 및 하드웨어 기반 고급 화상회의 시스템
# '화상회의(원격교육) 솔루션 - iMentor' 소개
# ▣ 'iMentor'는
# - 화상회의 전용 하드웨어 코덱(셋톱박스)와 PC, 노트북, 스마트폰 등으로 구성(하이브리드 형태의 화상회의)
# - 화상회의, 원격교육 재택근무 시 PC(또는 노트북) 입력으로 파워포인트, 워드 등의 문서 화면공유 가능
# - 문서카메라로 오프라인 문서(책, 인쇄자료, 수기자료 등)를 양측이 화상으로 동시에 보며 설명할 수 있음
# - 기업의 다자간 회의, 지점(지사) 간 미팅, 대리점(체인점) 교육 및 세미나 등 다양한 분야에서 활용 가능
# - 자세한 사항은 홈페이지(http://wooksungmedia.com) iMentor 제폼 소개 참조
# 놓치지 마세요.'''
# msg.set_content(body_content)
# ## 2. html 직접 코딩
# msg.set_content('''
# <!DOCTYPE html>
# <html>
# <body>
# <div style="background-color:#eee;padding:10px 20px;">
# 언택트 시대에 필요한 소프트웨어 및 하드웨어 기반 고급 화상회의 시스템
# <h1 style="font-family:Georgia, 'Times New Roman', Times, serif;color:blue;font-weight:bold;">
# '화상회의(원격교육) 솔루션 - iMentor' <span style="font-size:18px">소개</span> </h1>
# </div>
# </body>
# </html>
# ''', subtype='html')
## 3. html 파일을 파이썬 파일(wooksung_imentor.py)로 만든 후 import 하여 사용
msg.set_content(wooksung_imentor.body_content, subtype='html')
# 홍보 파일(이미지) 첨부
with open('./email/iMentor.png', 'rb') as f:
msg.add_attachment(f.read(), maintype='image', subtype='png', filename=f.name)
with smtplib.SMTP('smtp.gmail.com', 587) as smtp: # 587 or 465
smtp.ehlo()
smtp.starttls()
smtp.login(account.EMAIL_ADDRESS, account.EMAIL_PASSWORD) # 계정 로그인
smtp.send_message(msg)
print(f'{cnt}번째 발송 완료!')
result = True
except:
result = False
return result
def main():
wb = openpyxl.load_workbook('./email/emailTestList.xlsx')
ws = wb.active
cnt = 0
success_cnt = 0
# 엑셀에서 이메일 불러온 후, email_sender() 함수 호출
for x in range(2, ws.max_row + 1):
email = ws.cell(x, 1).value
cnt += 1
result = email_sender(email, cnt)
print(f'{email}: {result}')
if result:
success_cnt += 1
ws.cell(x, 2).value = ws.cell(x, 1).value # 전송 성공 건 표시
time.sleep(random.uniform(3, 5))
print(f'\n발송 건 {cnt:=,}개 중 {success_cnt:=,}개 성공\n메일 발송이 완료됨')
wb.save('./email/emailTestList.xlsx')
wb.close()
main()
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
12 간지 띠 알아보기 (파이썬 기초 예제) (0) | 2021.07.18 |
---|---|
[Python] 파이썬 기초(표준 라이브러리) 요약 - 참고용 (0) | 2021.07.14 |
[Python] 파이썬으로 이메일 리스트(엑셀) 불러와서 email 정상 여부 체크하기 (re 정규식과 openpyxl 사용) (0) | 2021.07.09 |
[Python] 파이썬을 활용한 업무자동화 - 웹 자동화(iframe 스크래핑, Web Element, 동적페이지 스크래핑) 연습 코드 정리 (0) | 2021.07.07 |
[Python] 파이썬 파일 시스템(디렉토리, 파일) 다루기 연습 코드 정리 (0) | 2021.07.06 |
댓글