Python自动发送和收取邮件的方法

作为课代表,经常要做的两件事是:帮忙发作业和帮忙收作业,而且很多时候是通过邮件来完成的,如果手动一封一封的收取和发送就很浪费时间——人生苦短,我用Python。

直接上代码,不想了解细节原理直接拉到最后,我封装成了两个函数,根据提示,输入参数,直接调用就行。亲测可行

不想看细节这部分可以直接跳过,但是运行的时候要把这一块也粘贴进去。

导入相关库
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\n'.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)

按顺序输入括号中的参数

from_addr:发件人邮箱

password:发件人密码(如果是QQ或者网易邮箱,这里写授权码)

to_addrs:收件邮箱列表

title:邮件标题

content:邮件正文内容

path:如果需要发送附件,这里填写附件的路径,如果没有,则直接忽略

from_addr = '20182*****@mail.scut.edu.cn'  # 打个码,这里输入你自己的邮箱就行
password = 'scut_827*****' # 输入你的密码(如果是qq或者网易邮箱,这里要输入授权码)
to_addrs = ['lly****@163.com', '12375947@qq.com'] # 这里就写需要发送的邮箱
title = '这是一封测试邮件' # 邮件标题
content = '随便写点东西' # 正文内容
path = 'C:/Users/要发的文件.xlsx' # 如果你想要发送一封带附件的邮件,那么这里就填写你的附件路径
sent_email(from_addr, password, to_addrs, title, content, path) # 发送邮件

2、收取邮件函数:get_email(email, password, path)

email:邮箱地址

password:密码(如果是qq邮箱或者网易邮箱,这里填授权码)

path:附件保留的位置

email = '1234567@163.com' # 填写你的邮箱账号(你要收取邮件的那个邮箱)
password = 'LXSHS*****'  # 填写你的邮箱密码(如果是qq或者网易邮箱,这里要输入授权
path = 'C:/Users/Desktop/' # 如果对方的邮件有附件,那么附件将下载到这里地方
get_email(email,password,path)

到此这篇关于Python自动发送和收取邮件的方法的文章就介绍到这了,更多相关Python自动发送和收取邮件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python自动发送邮件脚本

    本文实例为大家分享了python自动发送邮件的具体代码,供大家参考,具体内容如下 #coding=utf8 ''''' 该模块使自动发送邮件的模块 模块初始化时需要设置: sender:发送人 reciver:接收者 smtpServer:发送人的服务器类型 password:登录命令 subject:邮件标题 datafile:数据文件 文件包含六个函数: senderLogin():连接服务并登录服务 setSubject():设置邮件标题 SendMessage():邮件发送的信息 sen

  • python实现自动发送报警监控邮件

    本文实例为大家分享了python自动发送报警监控邮件 的具体代码,供大家参考,具体内容如下 因为有一些日常任务需要每日检查日否执行正确,所以需要一个报警监控的机制,这个需要你指定你发送的邮箱和你接收的邮箱,就可以使用了. 这四个需要填写一下,我们使用的qq企业邮箱所以host为smtp.exmail.qq.com mail_host=""  mail_user=""  mail_pass=""  mail_postfix=""

  • Python自动发送邮件的方法实例总结

    本文实例讲述了Python自动发送邮件的方法.分享给大家供大家参考,具体如下: python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容). email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等

  • python实现邮件自动发送

    本文实例为大家分享了python实现邮件自动发送的具体代码,供大家参考,具体内容如下 case 1:纯文本和HTML文件发送 # -*- coding: UTF-8 -*- import smtplib import traceback from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart def sendmail(subject,msg,toaddrs,fromaddr,smtpa

  • 基于python SMTP实现自动发送邮件教程解析

    最近工作中的一个项目需要自动发送一些信息邮件到指定邮箱的需求,那么如何实现Python自动发送邮件的功能呢?接下来我们就来简单的介绍下如何利用Python来实现自动发送邮件的功能. Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 ,说白了就是发送邮件的协议,python的smplib库对SMTP协议进行了简单的封装,提供了对SMTP的支持,可以发送纯文本邮件.HTML文件以及带附件的邮件. 首先我们构建一个SendEmai

  • Python实现自动发送邮件功能

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件. SMTP通讯的基本流程可以概括为以下几点: 1.连接SMTP服务器 2.登陆用户名和密码 3.发送指定邮件内容 4.退出SMTP连接 一.发送纯文本格式邮件 #coding:utf-8 import sys reload(sys) sys.setdefaulten

  • python实现自动发送邮件

    自动发送邮件功能是我们经常要用到的,比如每天定时统计报表信息,然后自动发送给运营人员,协助运营人员进行业务数据分析.本文是用Python写的一个自动发送邮件的脚本,调用函数时,直接把发件人邮箱地址.密码.收件人邮箱地址.邮件标题.内容等信息传递给函数,即可实现自动发送邮件功能. 脚本代码如下: # -*- coding: UTF-8 -*- import sys, os, re, urllib, urlparse import smtplib import traceback from emai

  • Python自动发送和收取邮件的方法

    作为课代表,经常要做的两件事是:帮忙发作业和帮忙收作业,而且很多时候是通过邮件来完成的,如果手动一封一封的收取和发送就很浪费时间--人生苦短,我用Python. 直接上代码,不想了解细节原理直接拉到最后,我封装成了两个函数,根据提示,输入参数,直接调用就行.亲测可行 不想看细节这部分可以直接跳过,但是运行的时候要把这一块也粘贴进去. 导入相关库 import smtplib,ssl from email.mime.multipart import MIMEMultipart from email

  • PHP基于IMAP收取邮件的方法示例

    本文实例讲述了PHP基于IMAP收取邮件的方法.分享给大家供大家参考,具体如下: 因需要处理公司企业邮箱被退信邮件问题:刚开始的思路是通过模拟登陆,对邮件进行抓取,(这种事情对我来说,做过了很多次,轻车熟路),不过邮箱还是有点复杂的, 后来想起做邮件发送时有用到smtp来发送邮件,记得也可以收取邮件,在腾讯企业邮箱帮助http://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1000584 看到IMAP和P

  • linux脚本实现自动发送和收取邮件的设置方法

    1. 命令行模式下的发送邮件 1.1 安装sendemail 2.2 使用sendemail和举例 2. 命令行模式下的收取邮件 2.1 安装getmail4 2.2 配置getmail4和简单举例 2.3 用munpack从邮件中抽取附件 1. 命令行模式下的发送邮件 1.1 安装sendemail 在Ubuntu下可以用新立得软件包管理器搜索安装,或者在终端运行: sudo apt-get install sendemail 建议在安装前先安装另外两个包:libio-socket-ssl-p

  • zabbix利用python脚本发送报警邮件的方法

    前言 zabbix是个非常强大的监控工具,可以监控linux和windows的服务器数据,也可以通过自定义key来扩展默认的监控项,但是自带的邮件报警提供的信息却不太友善.本文想通过自定脚本的方式,实现在报警邮件的同时发送对应的图像和url连接. 步骤如下: 1.编辑zabbix_server.conf文件,修改AlertScriptsPath参数,该参数用于指定外部脚本的绝对路径. vim /etc/zabbix/zabbix_server.conf AlertScriptsPath=/usr

  • 在Python中使用poplib模块收取邮件的教程

    SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上.收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3. Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件. 注意到POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本. 要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本

  • Python实现发送与接收邮件的方法详解

    本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter class Window: def __init__(self,root): label1 = tkinter.Label(root,text='SMTP') label2 = tkinter.Label(root,text='Port') label3 = tkinter.Label(root,text

  • python实现用户登陆邮件通知的方法

    本文实例讲述了python实现用户登陆邮件通知的方法.分享给大家供大家参考.具体如下: 这里写在linux计划任务里定时执行,当有新用户登陆时候发送用户名到指定邮箱通知管理员. #!/usr/bin/env python #encoding=utf-8 from smtplib import SMTP import subprocess smtp = "smtp.qq.com" user = '1234567' password = 'xxxx' run_comd = subproce

  • python登录pop3邮件服务器接收邮件的方法

    本文实例讲述了python登录pop3邮件服务器接收邮件的方法.分享给大家供大家参考.具体实现方法如下: import poplib, string PopServerName = "mail.yourserver.com" PopServer = poplib.POP3(PopServerName) print PopServer.getwelcome() PopServer.user('yourName') PopServer.pass_('yourPass') r, items,

  • Python编程实现及时获取新邮件的方法示例

    本文实例讲述了Python编程实现及时获取新邮件的方法.分享给大家供大家参考,具体如下: #-*- encoding: utf-8 -*- import sys import locale import poplib from email import parser import email import string import mysql.connector import traceback import datetime from mysql.connector import error

随机推荐