Python for Email
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的更多相关文章
- [Python] 发送email的几种方式
python发送email还是比較简单的,能够通过登录邮件服务来发送,linux下也能够使用调用sendmail命令来发送,还能够使用本地或者是远程的smtp服务来发送邮件,无论是单个,群发,还是抄送 ...
- python操作email
python操作email 参考链接: python官网imaplib: https://docs.python.org/2/library/imaplib.html Python 用IMAP接收邮件 ...
- 使用python调用email模块发送邮件附件
使用python调用email模块实现附件发送 需要模块: import datetime import time import sys import mimetypes import smtplib ...
- 使用python的email、smtplib、poplib模块收发邮件
使用python的email.smtplib.poplib模块收发邮件 一封电子邮件的旅程是: MUA:Mail User Agent——邮件用户代理.(即类似Outlook的电子邮件软件) MTA: ...
- Python 发送 email 的两种方式
Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...
- python smtplib email
监控系统需要触发报警邮件, 简单笔记一下的用到的库. smtplib class smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) 返 ...
- 第一个 Python 程序 - Email Manager Demo
看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' ...
- python send email
#!/usr/bin/python # -*- coding: UTF-8 -*- # coding:utf8 from smtplib import SMTP_SSL from email.head ...
- python的email、smtplib、poplib模块收发邮件
一封电子邮件的旅程是: MUA:Mail User Agent--邮件用户代理.(即类似Outlook的电子邮件软件) MTA:Mail Transfer Agent--邮件传输代理,就是那些Emai ...
随机推荐
- bitmap以及异或运算法
一 有40亿个整数,再给一个新的整数,需要判断新的整数是否在1亿个整数中. 此处需要用到bitmap方法,每个整数用一个bit表示,1表示存在,0表示不存在.因此一个4字节的int=32个bit也就是 ...
- Java 8 stream 经典示例
package org.study2.java8.stream; import org.junit.Test; import java.util.*; import java.util.stream. ...
- [LeetCode] 114. Flatten Binary Tree to Linked List 将二叉树展平为链表
Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...
- [LeetCode] 243. Shortest Word Distance 最短单词距离
Given a list of words and two words word1 and word2, return the shortest distance between these two ...
- [LeetCode] 346. Moving Average from Data Stream 从数据流中移动平均值
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- node 单例
ScriptManager.getInstance = function () { if (_instance != null) { return _instance; } else { return ...
- Oracle:时间字段模糊查询
需要查询某一天的数据,但是库里面存的是下图date类型 将Oracle中时间字段转化成字符串,然后进行字符串模糊查询 select * from CAINIAO_MONITOR_MSG t WHERE ...
- dubbo源码分析01:SPI机制
一.什么是SPI SPI全称为Service Provider Interface,是一种服务发现机制,其本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件.这样可以在运行时,动态为 ...
- 【python小记】访问mysql数据库
题记: 最近因为工作需要,学习了python,瞬间对这个轻松快捷的语给吸引了,以前只知道js脚本是写网页的,没有想到python这个脚本语言的应用范围可以这么广泛,现在做一些简单或稍微复杂的操作,基本 ...
- LeetCode 78. 子集(Subsets) 34
78. 子集 78. Subsets 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明: 解集不能包含重复的子集. 每日一算法2019/6/6Day 34L ...