使用Python自动发送邮件

  发送普通邮件

使用Python自动发送邮件_第1张图片

 SMTP(Simple Mail Transfer Protocol)是简单传输协议。

python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下:

email模块:负责构建邮件

smtplib模块:负责发送邮件

常用方法与属性: 

使用Python自动发送邮件_第2张图片

 如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务

使用Python自动发送邮件_第3张图片

 首次开启需要你用手机号发送短信,照着做就好了,做完之后会给你一个授权码,记着这个授权码,写代码需要用到,忘记了也可以找回

接着编写代码,发送普通邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email():
    # 设置要登录的邮箱
    smtp_obj = smtplib.SMTP('smtp.qq.com')
    # 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码
    smtp_obj.login('[email protected]','spcdwgqkltjsbiah')
    # 编辑内容
    mail_text = 'This is Email~ 您要的邮件来啦~~'
    # plain 原生文本模式
    msg_body = MIMEText(mail_text,'plain','utf-8')
    # 设置从哪发送的
    msg_body['From'] = Header('xxx','utf-8')  # 设置发送人
    msg_body['Subject'] = Header('测试Python自动邮件','utf-8')  # 设置内容主题
    # 发送邮件  这里第一个邮箱填自己的,第二个填收件人的邮箱地址
    smtp_obj.sendmail('[email protected]','[email protected]',msg_body.as_string())

if __name__ =='__main__':
    send_email()

发送HTML邮件

使用Python自动发送邮件_第4张图片

 发送HTML邮件只需要把发送的内容换成html代码即可

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email():
    # 设置要登录的邮箱
    smtp_obj = smtplib.SMTP('smtp.qq.com')
    # 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码
    smtp_obj.login('[email protected]','spcdwgqkltjsbiah')
    # 编辑内容
    mail_text = '''
    

这是一个HTML邮件通知

这个是邮件的内容

这个是链接

''' # plain 原生文本模式 msg_body = MIMEText(mail_text,'plain','utf-8') # 设置从哪发送的 msg_body['From'] = Header('xxx','utf-8') # 设置发送人 msg_body['Subject'] = Header('测试Python自动邮件','utf-8') # 设置内容主题 # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址 smtp_obj.sendmail('[email protected]','[email protected]',msg_body.as_string()) if __name__ =='__main__': send_email()

发送附件邮件-smtplib

有时邮件的内容只靠文本是无法完全描述内容。这时就可以考虑发 送附件来携带内容。具体方法如下:

设置登录服务器 、登录邮箱、增加附件 、设置请求头、 发送邮件

使用Python自动发送邮件_第5张图片

import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Header

def send_file_email():
    # 设置邮箱服务器
    stmp_obj = smtplib.SMTP('smtp.qq.com')
    # 登录邮箱
    stmp_obj.login('[email protected]','spcdwgqkltjsbiah')
    # 设置邮件内容
    # 文本
    msg_txt = MIMEText('这个带有附件的邮件','plain','utf-8')
    # 附件  打开你要发送的文件
    msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())
    msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')
    # 封装要发送的数据
    part = MIMEMultipart()
    part.attach(msg_txt)
    part.attach(msg_file)
    # 设置邮件其它信息
    part['From'] = Header('xx','utf-8')
    part['Subject'] = Header('附件邮件','utf-8')
    # 发送邮件
    stmp_obj.sendmail('[email protected]','[email protected]',part.as_string())

if __name__ =='__main__':
    send_file_email()

批量发送邮件-smtplib

这里以发送工资条为例

工资数据如下: 

使用Python自动发送邮件_第6张图片

from email.header import Header
from email.mime.text import MIMEText
import smtplib

from openpyxl import load_workbook

def send_many_mail():
     # 设置登录邮箱服务器
    smtp_obj = smtplib.SMTP('smtp.qq.com')
    # 登录邮箱
    smtp_obj.login('[email protected]','spcdwgqkltjsbiah')
    # 打开excel文件
    wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)
    # 激活工作簿
    sh = wb.active
    # 读取数据-遍历
    for i,r in enumerate(sh.iter_rows()):
        if i != 0:
            # 编辑内容
            msg_txt = f'''
            

您好:{r[1].value}

请查收2030年12月工资条详情:

工号 姓名 部门 基本工资 提成 加班工资 社保扣除 考勤扣除 应发工资 邮箱
{r[0].value} {r[1].value} {r[2].value} {r[3].value} {r[4].value} {r[5].value} {r[6].value} {r[7].value} {r[8].value} {r[9].value}
''' msg = MIMEText(msg_txt,'html','utf-8') # 设置邮件其他信息 msg['From'] = Header('财务部','utf-8') msg['Subject'] = Header('工资条','utf-8') #发送邮件 smtp_obj.sendmail('[email protected]',{r[9].value},msg.as_string()) print(f'{r[1].value} 工资条发送成功!!') if __name__ =='__main__': send_many_mail()

发送邮件-zmail

使用Python自动发送邮件_第7张图片

 Zmail的优势

1 自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)

2 将一个字典映射为email,构造信件就像构造字典一样简单

3 自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)

安装:pip install zmail

使用Python自动发送邮件_第8张图片

发送的消息以字典发送,包含的key:

subject 邮件主题

from 发送人

content_text 邮件内容-文本

content_html 邮件内容-HTML

attachments 邮件内容-附件,可写多个 

import zmail
def send_text():
    # 登录邮箱
    server = zmail.server('[email protected]','spcdwgqkltjsbiah')
    # 编写内容
    info = {
        'from':'笨笨的张小白',
        'subject':'测试zmail模块',
        'content_text':'这个是zmail邮件信息'
    }
    # 发送邮件
    server.send_mail('[email protected]',info)
def send_html():
    # 登录邮箱
    server = zmail.server('[email protected]','spcdwgqkltjsbiah')
    # 编写内容
    info = {
        'from':笨笨的张小白',
        'subject':'测试zmail模块',
        'content_html':'

这个是zmail邮件信息

' } # 发送邮件 server.send_mail('[email protected]',info) def send_file(): # 登录邮箱 server = zmail.server('[email protected]','spcdwgqkltjsbiah') # 编写内容 info = { 'from':'笨笨的张小白', 'subject':'测试zmail模块', 'content_html':'

这个是zmail邮件信息

', 'attachments':[r'.\base_data\backg.jpg'] } # 发送邮件 server.send_mail('[email protected]',info) def get_email(): # 登录邮箱 server = zmail.server('[email protected]','tzteewnmyfqacbce') email = server.get_latest() print(email.get('subject')) print(email.get('from')) print(email.get('content_html')) print(email.get('content_text')) if __name__ == '__main__': # send_text() # send_html() # send_file() get_email()

你可能感兴趣的:(办公自动化,python,自动化)