python 3 smtplib 를 사용 하여 메 일 발송 기능 구현

이전의 업무 에서 업무 측은 일부 조정 을 하고 일부 핵심 지표 에 대해 더욱 세밀 하 게 분할 하고 정기 적 으로 생산 하 는 수 요 를 제시 했다.어떤 이유 로 이 부분 데 이 터 는 보고서 에 나타 나 기 가 불편 하기 때문에 메 일 을 통 해 정기 적 으로 업무 자 에 게 데 이 터 를 보 내 는 것 을 고려 합 니 다.
당시 에는 Liux 가 자체 적 으로 가지 고 있 는 mail 명령 을 사용 하여 이 루어 졌 으 나 어느 날 부터 서버 의 메 일 서비스 가 사용 되 지 않 는 다 는 것 을 알 고 스 크 립 트 를 로 컬 로 옮 기 고 Python 3 의 smtplib 와 crontab 를 조합 하여 이 루어 지 려 고 했 습 니 다.
우선,우 리 는 Python 3 표준 라 이브 러 리 의 smtplib 패키지 와 email 패 키 지 를 가 져 와 서 메 일의 구조 와 발송 을 실현 해 야 합 니 다.

import smtplib
from email.mime.text import MIMEText
from email.header import Header
그리고 메 일 내용 을 설정 해 야 합 니 다.

message = MIMEText('    ', 'plain', 'utf-8')
message['From'] = '[email protected]'
message['To'] = '[email protected],[email protected]'
subject = 'Python SMTP     '
message['Subject'] = Header(subject, 'utf-8')
전체 메 일 은 테마(subject),본문,보 내 는 사람과 받 는 사람 을 포함해 야 합 니 다.
message=MIMEText('메 일 테스트','plain','utf-8')는 메 일 본문 을 설정 하 는 데 사 용 됩 니 다.email.ime.text.MIMEText 의 세 가지 매개 변수 중 첫 번 째 는 메 일 본문 이 고 두 번 째 는 텍스트 형식 을 설정 하 는 것 이 며 세 번 째 는 텍스트 인 코딩 을 설정 하 는 데 사 용 됩 니 다.
message['From'] = '[email protected]'보 내 는 사람 표시 줄 설정 에 사용 합 니 다.
message['To'] ='[email protected],[email protected]'수신 자 표시 줄 을 설정 하 는 데 사 용 됩 니 다.여러 수신 자 간 에 영문 쉼표 로 직접 분리 하면 된다.
message['Subject']=Header(subject,'utf-8')는 메 일의 테 마 를 설정 하 는 데 사 용 됩 니 다.

이번 메 일 발송 은 왕 이의 126 메 일 을 예 로 들 기 때문에 서버 와 계 정 정 정 보 를 설정 해 야 합 니 다.

sender = '[email protected]'
receivers = ['[email protected]', '[email protected]']
mail_host = 'smtp.126.com'
mail_user = '[email protected]'
mail_pass = '********'
서버,메 일 계 정,비밀번호,보 내 는 사람과 받 는 사람 정 보 를 설정 해 야 합 니 다.
  • sender = '[email protected]'보 내 는 사람 정 보 를 설정 하 는 데 사 용 됩 니 다.이 곳 의 보 내 는 사람 은 message[from']의 일부 의미 와 달리 message 의 정 보 는 메 일 에 표시 되 며,여 기 는 sendmail 방법 을 사용 할 때 필요 한 매개 변수 입 니 다.즉,sender 라 는 변수 이름 은 중요 하지 않 습 니 다.sendmail 에 메 일 주소 의 문자열 을 직접 입력 할 수도 있 습 니 다
  • receivers = ['[email protected]', '[email protected]']수신 자 정 보 를 설정 하 는 데 사 용 됩 니 다.수신 자가 하나 밖 에 없다 면 우 리 는 직접 문자열 로 값 을 부여 할 수 있 습 니 다.받 는 사람 이 여러 개 라면 sendmail 은 목록 을 받 아야 합 니 다.이전 과 유사 합 니 다.이곳 의 의 미 는 message['to']부분 과 다 릅 니 다
  • mail_host, mail_user, mail_pass 는 메 일 발송 서버 와 메 일의 계 정 비밀 번 호 를 설정 하 는 데 사 용 됩 니 다.위 와 유사 합 니 다.변수 이름 은 중요 하지 않 습 니 다.이 변 수 를 설정 하지 않 고 sendmail 에 문자열 을 직접 입력 하 는 것 도 가능 합 니 다
  • 마지막 으로,우 리 는 smtplib 를 사용 하여 메 일 을 보 냅 니 다.
    
    try:
     smtpObj = smtplib.SMTP() 
     smtpObj.connect(mail_host, 25) # 25   SMTP    
     smtpObj.login(mail_user,mail_pass)
     smtpObj.sendmail(sender, receivers, message.as_string())
     print("      !")
    except smtplib.SMTPException:
     print("      !")
    
  • smtpObj = smtplib.SMTP(); smtpObj.connect(mail_host, 25);smtpObj=smtplib.SMTP(mailhost,25),이것 은 SMTP 대상 을 구축 하기 위 한 것 입 니 다
  • smtpObj.login(mail_user,mail_pass)메 일 로그 인 에 사용 합 니 다.주의해 야 할 것 은,이곳 의 mailpass 는 반드시 당신 의 메 일 비밀번호 가 아 닙 니 다.많은 메 일 서 비 스 는 왕 이 메 일 에서 권한 수여 코드 를 제공 하 는 기능 을 포함 합 니 다.이 기능 을 켜 면 메 일 비밀 번 호 를 권한 수여 코드 로 바 꿔 야 합 니 다
  • smtpObj.sendmail(sender, receivers, message.as_string()은 SMTP 대상 의 sendmail 방법 으로 메 일 을 보 냅 니 다
  • 지금까지 우 리 는 간단 한 메 일 발송 사례 를 실현 했다.
    그러나 많은 장면 에서 우 리 는 메 일 에 첨부 파일 을 추가 해 야 한다.이런 상황 에서 우 리 는 먼저 MIME Multipart()인 스 턴 스 를 만 든 다음 에 하나 이상 의 첨부 파일 을 만 들 고 마지막 으로 smtplib 를 사용 하여 보 내야 한다.전체 예제 코드 는 다음 과 같 습 니 다.
    
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    #             
    sender = '[email protected]'
    receivers = ['[email protected]', '[email protected]']
    mail_host = 'smtp.126.com'
    mail_user = '[email protected]'
    mail_pass = 'password or authorization code here'
    
    #   MIMEMultipart  ,            
    message = MIMEMultipart()
    message.attach(MIMEText('    ', 'plain', 'utf-8'))
    message['From'] = '[email protected]'
    message['To'] = '[email protected],[email protected]'
    subject = 'Python SMTP     '
    message['Subject'] = Header(subject, 'utf-8')
    
    #       
    attr = MIMEText(open('./test.txt', 'r').read())
    attr['Content-Type'] = 'application/octet-stream'
    attr['Content-Disposition'] = 'attachment; filename = ' + 'test.txt'
    message.attach(attr)
    
    #     
    try:
     smtpObj = smtplib.SMTP() 
     smtpObj.connect(mail_host, 25) # 25   SMTP    
     smtpObj.login(mail_user,mail_pass)
     smtpObj.sendmail(sender, receivers, message.as_string())
     print("      !")
    except smtplib.SMTPException:
     print("      !")
    이로써 우 리 는 첨부 파일 이 있 는 메 일 발송 을 실 현 했 습 니 다.그 다음 에 crontab 등 도 구 를 통 해 정시 에 메 일 을 보 내 는 임 무 를 완성 할 수 있 습 니 다.여기 서 긴 말 하지 않 겠 습 니 다.필요 한 학생 들 은 스스로 crontab 의 사용 을 조회 할 수 있 습 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기