python邮件加附件发送模块

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会话并且关闭连接

最后一个是别人写的各种例子,也算是比较全的:

http://www.cnblogs.com/lonelycatcher/archive/2012/02/09/2343463.html


后来两天,发现一个错误,这里说明下这个错误的原因:

这个是我的写的收件的地址:

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())




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些参考代码。您需要使用Python中的smtplib模块和email模块。 以下是一个基本示例: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.utils import COMMASPACE from email import encoders import os def send_mail(send_from, send_to, subject, text, files=[]): ''' 发送邮件并携带附件。 send_from: 发件人邮箱 send_to: 收件人邮箱 subject: 邮件主题 text: 邮件正文 files: 附件列表 ''' assert isinstance(send_to, list) msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Subject'] = subject msg.attach(MIMEText(text, 'html')) for file in files: part = MIMEBase('application', "octet-stream") with open(file, 'rb') as f: part.set_payload(f.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="{}"'.format(os.path.basename(file))) msg.attach(part) smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.starttls() smtp.login(send_from, 'your-password-here') smtp.sendmail(send_from, send_to, msg.as_string()) smtp.quit() ``` 您需要将'your-password-here'替换为您的发件人帐户密码,并确认您的发件人帐户允许使用SMTP来发送电子邮件。 然后,您可以使用以下代码运行该函数: ```python send_mail('[email protected]', ['[email protected]', '[email protected]'], 'Test email with attachment', 'This is a test email', ['test.txt', 'test.png']) ``` 这将从'[email protected]'发送一封包含'test.txt'和'test.png'两个附件的电子邮件发送给'[email protected]'和'[email protected]'。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值