smtp.sendmail(from_addr,to_addrs,msg.as_string())
smtp.sendmail(from_addr,to_addrs,msg.as_string())
用Jenkins每天跑完一些性能指标,就想着跑完了,可以发个邮件通知下大家,也让大家看到一些性能数据
这里发邮件主要是一个模块:
这个模块是用来添加内容的模块:import MIMEText
这二个就是附件、图片的模块:
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
这四个模块是python中自带的,也基本可以满足大部分用户的需求了,下面说说这些模块的用法吧
smtp = smtplib.SMTP()
创建一个对象
smtp.set_debuglevel(1)#设置输出debug调试信息,默认不输出调试信息
smtp.login(mail_username,mail_password)
#这样就完成连接
下面这个说下添加收件人、标题、内容、附件:
#添加附件的方法
msg = MIMEMultipart()
attPath = os.getcwd() + '/' + attNane
#这个是我的添加自动获取路径的方法
att1 = MIMEText(open(attPath, 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="%s"' % attNane
msg.attach(att1)
#添加内容的方法:
msg = MIMEText(emailContent)
msg.attach(msg)
#这下面三个数组的名字是模块规定的,其中
msg['From'] = 'xxxx@qq.com'
msg['To'] = 'XXXX@qq.com'
#msg['To'] = ['XXXX@qq.com','XXXX@qq.com']#群发的格式
msg['Subject']= emailSubject
#添加图片方法
fp = open('h:\\python\\1.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)
</pre><p></p><pre>
这几个也算是说完了,下面说下要注意的有些东西地方
一个学会用try:
try:
print smtp.connect(HOST,PORT)
except:
print 'CONNECT ERROR ****'
这个方便自己以后看代码出错再哪
下面是转别人的SMTP的主要方法,写的比较全了。
SMTP.set_debuglevel(level)
设置输出debug调试信息,默认不输出调试信息。
SMTP.docmd(cmd[, argstring])
发送一个command到smtp服务器,
SMTP.connect([host[, port]])
连接到指定的smtp服务器,默认是本机的25端口。也可以写成hostname:port的形式。
SMTP.helo([hostname])
使用helo指令向smtp服务器确认你的身份。
SMTP.ehlo([hostname])
使用ehlo指令向esmtp服务器确认你的身份。
SMTP.ehlo_or_helo_if_needed()
如果在以前的会话连接中没有提供ehlo或者helo指令,这个方法调用ehlo()或者helo()。
SMTP.has_extn(name)
判断指定的名称是否在smtp服务器上。
SMTP.verify(address)
判断邮件地址是否在smtp服务器上存在。
SMTP.login(user, password)
登陆需要验证的smtp服务器,如果之前没有提供ehlo或者helo指令,则会先尝试ESMTP的ehlo指令。
SMTP.starttls([keyfile[, certfile]])
使smtp连接运行在TLS模式,所有的smtp指令都会被加密。
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
发送邮件,该方法需要一些邮件地址和消息。
SMTP.quit()
终止smtp会话并且关闭连接
最后一个是别人写的各种例子,也算是比较全的:
后来两天,发现一个错误,这里说明下这个错误的原因:
这个是我的写的收件的地址:
to_addrs=['xx@qq.com','xx@xx.com']
再写这个收件人的时候写成这样:
msg['To'] = to_addrs
smtp.sendmail(from_addr,to_addrs,msg.as_string())
这个时候会报一个错:
AttributeError: 'list' object has no attribute 'lstrip'
这个错误就是写数组中一个值的时候直接用一个另一个数组直接赋值,就会导致原数组这个值的一些属性不存在了,所以才报上面的错误,解决的方式有两种:
1、写msg['To]’的时候用以下方式写入:
msg['To'] = ", ".join(to_addrs)
这样就一会导致msg数组属性不存在的问题了。
2、就是直接不使用msg[''To”],直接发送,这样就不会存在属性的问题了。
msg['Subject'] = subject
smtp.sendmail(from_addr,to_addrs,msg.as_string())