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. C#反射技术的简单操作(读取和设置类的属性、属性值)

    public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...

  2. [LeetCode] 548. Split Array with Equal Sum 分割数组成和相同的子数组

    Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies fol ...

  3. 简单的Lock死锁例子

    static void Main(string[] args) { lock (_lock1) { var t = new Thread(() => { lock (_lock1) { Cons ...

  4. win10安装网络适配器

    上面这个有些叫Microsoft Loopback Adapter

  5. 【转】Fuel 9.0安装Openstack网络验证失败解决

    原文链接:https://blog.csdn.net/wiborgite/article/details/52983575 故障现象: 网络验证失败,报错信息如下: Repo availability ...

  6. Word 自带公式使用方法技巧(11)

    1. 快捷命令 在Word中输入「Alt+=」,可以打开Word中自带公式编辑器.这个编辑器似乎没有什么特别,但其实 Word 2010 以后是支持 LaTeX 语法的.常用规则如下: 分号: a/b ...

  7. SQL——LIKE操作符

    一.LIKE操作符的基本用法 LIKE操作符用于在WHERE子句中,搜索相似.类似的数据. LIKE操作符语法: SELECT 列名1,列名2... FROM 表名 WHERE 列名 LIKE xxx ...

  8. 有关java中的try{}catch(){}的讲解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_38225558/article/d ...

  9. TypeScript之枚举

    什么是枚举类型,有什么作用? 枚举类型就是一个用来组织一些有相似之处的常量的对象,作用就是管理常量,让常量更规范,统一.例: enum Direction { Up = 1, Down, Left, ...

  10. Codechef TSUM2 Sum on Tree 点分治、李超线段树

    传送门 点分治模板题都不会迟早要完 发现这道题需要统计所有路径的信息,考虑点分治统计路径信息. 点分治之后,因为路径是有向的,所以对于每一条路径都有向上和向下的两种.那么如果一条向上的路径,点数为\( ...