Pythonメールの自動送信と受信方法


授業の代表として、いつもやるべきことは二つあります。宿題と宿題の手伝い、そしてメールで完成することが多いです。手動で一通の受け取りと発送は時間の無駄です。人生は短いです。Pythoonを使います。
直接コードを通して、細かい原理を知りたくなくて、直接最後まで引っ張って、二つの関数にカプセル化しました。ヒントによって、パラメーターを入力して、直接呼び出してもいいです。自分で測って実行してもよい
細部を見たくないので、この部分は直接飛ばしてもいいですが、運行する時はこの部分も貼り付けてください。

     
import smtplib,ssl
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import formatdate
from email import encoders
import poplib
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from email.header import Header

#          ,      ,print            。 '=?gb18030?B?yrXWpL3hufsueGxz?='  ,  decode,      
def decode_str(s):
  value, charset = decode_header(s)[0]
  if charset:
    value = value.decode(charset)
  return value
#            ,          :       ,    ['From','To','Subject']
def get_header(msg):
  for header in ['From', 'To', 'Subject']:
    value = msg.get(header, '')
    if value:
      if header == 'Subject': #             
        value = decode_str(value)
      elif header in ['From','To']:
        hdr, addr = parseaddr(value) #           
        name = decode_str(addr)
        value=name
    print(header + ':' + value)
#       ,         ,   message     ,    ,  header Content-Type   
def guess_charset(msg):
  charset = msg.get_charset()
  if charset is None:
    content_type = msg.get('Content-Type', '').lower()
    pos = content_type.find('charset=')
    if pos >= 0:
      charset = content_type[pos+8:].strip()
  return charset
#      :   ,            ,msg.walk(),      ,     .get_filename()         
def get_file(path, msg):
  for part in msg.walk():
    filename=part.get_filename()
    if filename!=None:                  #      
      filename = decode_str(filename)         #          ,            
      data = part.get_payload(decode = True)      #        
      f = open(path+filename, 'wb')          #              
      f.write(data)
      f.close()
      print('  ',filename,'    ')
def get_content(msg):
  for part in msg.walk():
    content_type = part.get_content_type()
    charset = guess_charset(part)
    if part.get_filename()!=None: #     ,     
      continue
    email_content_type = ''
    content = ''
    if content_type == 'text/plain':
      email_content_type = 'text'
    elif content_type == 'text/html':
      print('html      ')
      continue #  html     
      email_content_type = 'html'
    if charset:
      try:
        content = part.get_payload(decode=True).decode(charset)
      except AttributeError:
        print('type error')
      except LookupError:
        print("unknown encoding: utf-8")
    if email_content_type =='':
      continue  #      ,   
    print(email_content_type + ' ----- ' + content)
 # --------------------             --------------------------
def sent_email(from_addr,password, to_addrs,title,content,path=None):
  '''
  from_addr:     
  password:     (   QQ      ,      )
  to_addrs:      
  title:    
  content:    
  path:        ,         
  '''
  smtp_server = 'smtp.'+ from_addr.split('@')[-1]    #      
  msg = MIMEMultipart()            #        
  msg['From'] = Header(from_addr)       #        
  msg['Subject'] = Header(title)        #       
  msg.attach(MIMEText(content,'plain','utf-8')) #     
  if path != None:
    #     
    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(path, "rb").read())  #     
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment', filename=path.split('/')[-1])
    msg.attach(part) #          
  server = smtplib.SMTP_SSL(smtp_server) #       ,          
  server.connect(smtp_server,465) #       
  for to_addr in to_addrs: #          
    msg['To'] = Header(to_addr)
    server.login(from_addr, password) #     
    server.sendmail(from_addr, to_addr, msg.as_string())
  server.quit() #      
  print('    ')
def get_email(email,password,path):
  '''
  email:    
  password:  (   qq        ,      )
  path:       
  '''
  server=poplib.POP3_SSL('pop.'+email.split('@')[-1])  #          
  server.user(email)
  server.pass_(password)
  resp, mails, octets = server.list() #     
  index = len(mails)    #     
  resp, lines, octets = server.retr(index) #        
  msg_content = b'\r
'.join(lines).decode('utf-8','ignore') msg = Parser().parsestr(msg_content) #server.dele(index) get_header(msg) # , , , get_file(path,msg) # get_content(msg) # server.quit() print(' ')
直接ここを見てください
1、メール送信関数:sent_email(from_)addr、password、to_addrs、title、content、path=None)
括弧のパラメータを順番に入力します。
fromaddr:送信者メールボックス
password:差出人パスワード(もしQQか網易のメールボックスなら、ここで授権コードを書きます)
to_addrs:受信メールリスト
title:メールのタイトル
内容:メール本文
path:もし添付ファイルを送る必要があるなら、ここに添付ファイルのパスを記入します。ないなら、直接無視します。

from_addr = '20182*****@mail.scut.edu.cn'  #    ,            
password = 'scut_827*****' #       (   qq      ,        )
to_addrs = ['lly****@163.com', '[email protected]'] #             
title = '        ' #     
content = '      ' #     
path = 'C:/Users/     .xlsx' #                ,             
sent_email(from_addr, password, to_addrs, title, content, path) #     
2、受信メール関数:get_email(email、password、path)
メールアドレス
password:パスワード(qqメールまたは網易メールなら、ここで授権コードを記入)
path:添付ファイルの保留位置

email = '[email protected]' #         (           )
password = 'LXSHS*****'  #         (   qq      ,       
path = 'C:/Users/Desktop/' #           ,            
get_email(email,password,path)
ここでPython自動送信とメールの受け取り方法についての文章を紹介します。これに関連して、Pythonは自動的にメールの内容を送信して受け取ります。以前の文章を検索してください。また、下記の関連記事を見てください。これからもよろしくお願いします。