美文网首页
自动发送邮件脚本

自动发送邮件脚本

作者: 静小沐 | 来源:发表于2020-05-11 16:03 被阅读0次

  做商业项目的同僚们,在每次结果进行交付的时候,每次的邮件编写,文字核查,收件人发件人编写是不是让你感觉心力交瘁?
  跑流程的同僚们,在提交运行时间比较长的任务的时候,是不是时刻心系流程运行到哪一步了?

  我转python没有多久,之前perl出身,但python有些模块确实很强大,比如我们今天要提到的一个模块是:smtplib。
  SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。该句话摘自python3的菜鸟教程。
  该协议有三个主要的步骤:

  • smtpObj.connect:连接邮箱协议,不同的邮箱类型协议也不一样。
  • smtpObj.login:登录邮箱,需要用户名和密码。
  • smtpObj.sendmail:指定收件人,抄送对象,发送内容等。
      接下来我们进行一一代码讲解。
第一步:模块的导入。
import smtplib                                                                   
import argparse                                                                                 
import os
import sys                                                                             
from email.mime.text import MIMEText                                 
from email.header import Header
from smtplib import SMTP_SSL
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import pandas as pd
import codecs
import subprocess
import time
第二步:发送前账号及协议的准备
mail_user =  '123@qq.com'
mail_pass = '1234567'
mail_host =  'smtp.exmail.qq.com'  ###腾讯邮箱协议
receivers = ['456@qq.com','789@qq.com']  ##类型为list
cc  = ['456@qq.com','789@qq.com']          ##同上

第三步:发送内容的准备

  发送内容一般包括文字,图片,表格,附件等。但不管是什么类型,我们要将内容转成html格式。
  在开始前,我们先准备一个空的容器,用来存放我们要发送的内容。命令行如下:

msg = MIMEMultipart()

  先看文字,文字的格式写法参考html的格式,这里给大家提供一个示例。

message_qc = '<br><p style="text-indent:">该邮件为测试邮件。</p>'
msg.attach(MIMEText(message_qc,'html','utf-8'))

  再看图片。示例如下:

file = open("QR.png", "rb")
img_data = file.read()
file.close()
img = MIMEImage(img_data)
img.add_header('Content-ID', 'imageid')
msg.attach(img)     #将图片放入容器中

  接下来看表格。首先要把表格转成html形式,这里用到了panda进行表格读取,示例如下:

pd.set_option('max_colwidth',10000)   ###pandas读取表格时,设置最大的列宽。使得表格内容不换行。
data_gender = pd.read_csv(rep_file,sep='\t',index_col = False)
temp = data_gender.to_html(index=False)
html_text_tmp = temp.replace('class', 'cellspacing=\"0\" class')         ###表格类型,0表示为单外框线,默认为双外框线。
html_text = html_text_tmp.replace('<th>','<th Bgcolor=#92cddc>')    ###设置表头填充颜色
html_text = html_text.replace('text-align: right','text-align: center')     ###表格内容居中
msg.attach(MIMEText(html_text ,'html','utf-8'))                           ##将表格添加到容器中

  最后看一下添加附件,示例如下:

basename = os.path.basename(rep_file)   ##附件名称
qianz,ges = basename.strip().split('.')            ###分割名称,这里使用的是‘.’进行名字与格式的分割
mime = MIMEBase(qianz, ges, filename = basename)    ###以下操作添加附件名称
mime.add_header('Content-Disposition', 'attachment', filename = basename)  
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
f = open(rep_file,'rb')
mime.set_payload(f.read())
encoders.encode_base64(mime)
msg.attach(mime)   #将附件添加至容器中。
第四步:发送邮件,代码如下:
msg['From'] = Header(mail_user , 'utf-8') #发件人
msg['To'] = ";".join(receivers)       #收件人
msg['CC'] = ";".join(cc)              #抄送对象
msg['Subject'] = Header(subject, 'utf-8')  ##添加主题,subject的形成参考邮件发送文字部分。

try:
  smtpObj = smtplib.SMTP()
  smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
  smtpObj.login(mail_user,mail_pass)
  smtpObj.sendmail(sender, receivers+cc, msg.as_string())
  print ("邮件发送成功")
except smtplib.SMTPException:
  print ("Error: 无法发送邮件")

好了,以上为所有发送邮件的代码了,下一板块,介绍如何进行隐藏个人信息发送邮件。祝大家生活愉快~~~
参考:
1: https://www.runoob.com/python/python-email.html

相关文章

网友评论

      本文标题:自动发送邮件脚本

      本文链接:https://www.haomeiwen.com/subject/pccouhtx.html