最近在学习python,刚好需要写个数据库调用存储过程结果的邮件通知的小脚本,特地记录下来以免日后忘记。
python能流行主要还是有很多的模块,而且这些模块的调用代码也很简洁,大大简化了工作。不过我是在忍受不了R语言的慢速度后才转向Python的,之后开始接触python除数据分析之外的其他模块。
下面的发送邮件的脚本:
# -*- coding: utf-8 -*-
"""
自定义发送邮件的模块
输入参数:
title: 邮件标题
messages: 邮件内容
to_addr: 收件人,如果是多个收件人,将地址放在列表中即可
示例: 发邮件给两个人
send_mail('这是标题','这是内容',['收件人1@qq.com','收件人2@163.com'])
"""
#邮件的模块
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def send_mail(title,messages,to_addr=['12345678@qq.com'] ):
from_addr= r'from_addr@chinatmg.com' #设置发件人邮箱地址
password = r'password' #发件人邮箱密码
#SMTP服务器
smtp_server = 'smtp.chinatmg.com' #设置SMTP服务器
msg = MIMEText(messages, 'html', 'utf-8')
#设置邮件主题(要先实例化msg后才能设置主题)
msg['From'] = from_addr
msg['To'] = ','.join(to_addr) #据说这是一个bug,只有这样才能群发邮件
msg['Subject'] = title
#连接服务器发送邮件
server = smtplib.SMTP(smtp_server, 25)
#server.starttls() #开启加密传输
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr,to_addr, msg.as_string())
server.quit()
说明:
1.发件人的邮箱服务器要支持SMTP,一般邮箱是默认开启的,如果失败就需要看看这个有没有开启了。如果能用Foxmail等这些客户端登陆,能发送邮件,就说明已经开启了SMTP服务。
2.如果需要群发邮件,只需要将多个地址放在收件人列表中就可以了。
3.这里没有开启SSL邮件加密服务,开启的方式也很简单,只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。后面的代码和前面的发送邮件代码完全一样。
4.msg = MIMEText(messages, ‘html’, ‘utf-8’) 中的’html’表示发送的是HTML邮件,这时候你需要构建HTML代码。如果只是需要发送简单的文本,就用 MIMEText(messages, ‘plain’, ‘utf-8’)。
5.python还能发送邮件附件,图表等,这个以后再补上。