SMTP

正如 HTTP 是计算机用来通过因特网发送网页的协议,简单邮件传输协议(SMTP)

是用于发送电子邮件的协议

import smtplib

发送电子邮件

连接到SMTP服务器

smtpObj = smtplib.SMTP_SSL('pop.exmail.qq.com',465)
type(smtpObj)

发送SMTP的"hello"消息

smtpObj.ehlo() #返回250 means 成功

开始TLS加密

TLS 加密需要使用.starttls()方法

SSL 加密则不需要使用

登录到SMTP服务器

smtpObj.login('7379@jics.cn',input()) #返回235 means 成功 input由用户输入邮箱密码

发送电子邮件

smtpObj.sendmail("7379@jics.cn","evian_jeff@163.com",'Subject:So long.\nDear Alice,so long and thanks for all the fish. Sincerely,Bob')
#from发件邮箱 to收件邮箱 'Subject:\n'开头的邮件标题行和正文字符串
#返回空字典means成功

从SMTP服务器断开

smtpObj.quit() #221 means bye

IMAP

  • imaplib python自带模块
  • imapclient 第三方包 pip install imapclient
  • pyzmail 解析邮件内容 pip install pyzmail36
# pip install imapclient 安装imapclient
import imapclient

用IMAP获取和删除电子邮件

# pip install pyzmail36
import pyzmail #需要需改util.py文件

连接到IMAP服务器

import imapclient
imapObj = imapclient.IMAPClient('imap.exmail.qq.com', ssl=True)

登录到IMAP服务器

imapObj.login('7379@jics.cn', input())

搜索电子邮件

登录后,实际获取你感兴趣的电子邮件分为两步。首先,必须选择要搜索的文件

夹。然后,必须调用 IMAPClient 对象的 search()方法,传入 IMAP 搜索关键词字符串。

选择文件夹

import pprint
pprint.pprint(imapObj.list_folders())
imapObj.select_folder('INBOX', readonly=True) #除非你想删除的电子邮件,否则将 readonly 设置为 True总是个好主意

执行搜索

UIDs = imapObj.search(['SINCE 27-Aug-2019'])
UIDs

大小限制

import imaplib
imaplib._MAXLINE = 10000000

取邮件并标记为已读

rawMessages = imapObj.fetch(UIDs,['BODY[]'])
import pprint
pprint.pprint(rawMessages)

从原始消息中获取电子邮件地址

import pyzmail
message = pyzmail.PyzMessage.factory(rawMessages[4][b'BODY[]'])
message.get_subject() #查看主题
message.get_address('from') #每个元组包含两个字符串:第一个是与该电子邮件地址关联的名称,第二个是电子邮件地址本身
message.get_address('to')
message.get_addresses('cc')
message.get_addresses('bcc')

从原始消息中获取正文

message.text_part != True
message.text_part.get_payload().decode(message.text_part.charset) #'NoneType' object has no attribute 'get_payload'
message.html_part != None
message.html_part.get_payload().decode(message.html_part.charset)

删除电子邮件

imapObj.select_folder('INBOX', readonly=False)
UIDs = imapObj.search(['ON 26-AUG-2019'])
UIDs
imapObj.delete_messages(UIDs)
imapObj.expunge()
pprint.pprint(imapObj.list_folders()) #INBOX收件箱 Sent Messages发件箱 Drafts草稿箱 Deleted Messages已删除 Junk垃圾箱

从IMAP服务器断开

imapObj.logout()

项目:向会员发送会费提醒电子邮件

打开Excel文件

import openpyxl,smtplib,sys
# Open the spreadsheet and get the latest dues status.
wb = openpyxl.load_workbook(r"C:\Users\Administrator\automate_online-materials\duesRecords.xlsx")
sheet = wb.active
lastCol = sheet.max_column
latestMonth = sheet.cell(row=1,column=lastCol).value

查找所有未付成员

# TODO: Check each member's payment status.
unpaidMembers = {}
for r in range(2,sheet.max_row+1):
payment = sheet.cell(row=r,column=lastCol).value
if payment != 'paid':
name = sheet.cell(row=r,column=1).value
email = sheet.cell(row=r,column=2).value
unpaidMembers[name] = email

发送定制的电子邮件提醒

# TODO: Log in to email account.
smtpObj = smtplib.SMTP_SSL('pop.exmail.qq.com',465)
smtpObj.ehlo()
smtpObj.login("7379@jics.cn",input())
# TODO: Send out reminder emails.
for name,email in unpaidMembers.items():
body = '''Subject: %s dues unpaid.\nDear %s,\nRecord show that you have not paid dues for %s.
Please make this payment as soon as possible. Thank you!''' % (latestMonth,name,latestMonth)
print('Sending email to %s ... '% email)
sendmailStatus = smtpObj.sendmail('7379@jics.cn',email,body) if sendmailStatus != {}:
print("There was a problem sending email to %s:%s") % (email,sendmailStatus)
smtpObj.quit()

Python for Email的更多相关文章

  1. [Python] 发送email的几种方式

    python发送email还是比較简单的,能够通过登录邮件服务来发送,linux下也能够使用调用sendmail命令来发送,还能够使用本地或者是远程的smtp服务来发送邮件,无论是单个,群发,还是抄送 ...

  2. python操作email

    python操作email 参考链接: python官网imaplib: https://docs.python.org/2/library/imaplib.html Python 用IMAP接收邮件 ...

  3. 使用python调用email模块发送邮件附件

    使用python调用email模块实现附件发送 需要模块: import datetime import time import sys import mimetypes import smtplib ...

  4. 使用python的email、smtplib、poplib模块收发邮件

    使用python的email.smtplib.poplib模块收发邮件 一封电子邮件的旅程是: MUA:Mail User Agent——邮件用户代理.(即类似Outlook的电子邮件软件) MTA: ...

  5. Python 发送 email 的两种方式

    Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...

  6. python smtplib email

    监控系统需要触发报警邮件, 简单笔记一下的用到的库. smtplib class smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) 返 ...

  7. 第一个 Python 程序 - Email Manager Demo

    看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' ...

  8. python send email

    #!/usr/bin/python # -*- coding: UTF-8 -*- # coding:utf8 from smtplib import SMTP_SSL from email.head ...

  9. python的email、smtplib、poplib模块收发邮件

    一封电子邮件的旅程是: MUA:Mail User Agent--邮件用户代理.(即类似Outlook的电子邮件软件) MTA:Mail Transfer Agent--邮件传输代理,就是那些Emai ...

随机推荐

  1. LeetCode:缺失的第一个正数【41】

    LeetCode:缺失的第一个正数[41] 题目描述 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3示例 2: 输入: [3,4,-1,1] ...

  2. 【编程开发】x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名

    a2ps-4.13b-57.2.el5.i386.rpm 每一个rpm包的名称都由"-"和"."分成了若干部分.就拿 a2ps-4.13b-57.2.el5.i ...

  3. 阿里云移动推送 ios项目添加SDK步骤

    添加阿里云Pods仓库和各产品SDK Pod依赖,配置步骤如下: 1. CocoaPods集成添加阿里云Pods仓库,Podfile添加: source 'https://github.com/ali ...

  4. win10 双网卡设置内网和外网同时访问

    当前环境是内网使用固定ip 用有线连接 外网自动获取使用wifi模块连接wifi cmd窗口下运行route print -4 打印路由信息 首先删除 所有0.0.0.0的路由,也就是默认设置 rou ...

  5. 《算法 - Lru算法》

    一:概述 - LRU 用于管理缓存策略,其本身在 Linux/Redis/Mysql 中均有实现.只是实现方式不尽相同. - LRU 算法[Least recently used(最近最少使用)] - ...

  6. python_scratch教程:绘制荧光圈教程

    在演唱会中,出现最多的就是荧光棒,很多粉丝也都会举着荧光棒为自己的爱豆加油,当然也会有一些人用的荧光圈,为此南京小码王scratch培训机构,就想到了和小朋友一起绘制荧光圈,现在我们就一起来看看吧! ...

  7. day32——进程、操作系统

    day32 进程的基础 程序 一堆静态的代码文件 进程 一个正在运行的程序进程.抽象的概念 被谁运行? 由操作系统操控调用交于CPU运行 ​ 操作系统 管理控制协调计算机中硬件与软件的关系 操作系统的 ...

  8. Spring RestTemplate的使用示例

    @Bean注册一个RestTemplate: 调用服务: 因为要参与网络传输,所以要实现序列化接口:

  9. mysql_重置密码

    # 修改编码 ```pythonshow variables like '%char%'; #查看当前使用的编码 1.打开配置文件: vim /etc/mysql/my.cnf 2.在[client] ...

  10. 宽度学习(Broad Learning System)

    宽度学习(Broad Learning System) 2018-09-27 19:58:01 颹蕭蕭 阅读数 10498  收藏 文章标签: 宽度学习BLBLS机器学习陈俊龙 更多 分类专栏: 机器 ...