python邮件加附件发送模块

本文介绍如何使用Python的smtplib模块配置Jenkins以发送带有性能数据、附件及图片的邮件通知。文中详细解释了各个步骤及注意事项。

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




Python发送带有附件的电子邮件,可以通过 `smtplib` 和 `email` 模块实现。发送附件邮件的过程涉及构建邮件内容、添加附件、连接邮件服务器并发送邮件。以下是详细说明和示例代码。 ### 构建邮件内容 要发送带有附件邮件,需要使用 `MIMEMultipart` 来创建多部分邮件内容,并通过 `MIMEBase` 添加附件。同时,还需要对附件进行编码以确保正确传输。 ```python from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders import smtplib # 邮件配置 sender = 'your_email@example.com' receiver = 'receiver_email@example.com' subject = '邮件主题' body = '这是邮件正文内容' # 创建邮件对象 msg = MIMEMultipart() msg['From'] = sender msg['To'] = receiver msg['Subject'] = subject # 添加邮件正文 msg.attach(MIMEText(body, 'plain')) # 添加附件 file_path = 'path_to_your_file.txt' file_name = os.path.basename(file_path) with open(file_path, 'rb') as attachment: part = MIMEBase('application', 'octet-stream') part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header( 'Content-Disposition', f'attachment; filename="{file_name}"' ) msg.attach(part) # 发送邮件 try: server = smtplib.SMTP('smtp.example.com', 587) server.starttls() server.login(sender, 'your_password') server.sendmail(sender, receiver, msg.as_string()) server.quit() print("邮件发送成功") except Exception as e: print(f"邮件发送失败: {e}") ``` ### 使用 Django 发送附件邮件 如果使用 Django 框架,可以通过 `EmailMessage` 类简化发送过程。以下是 Django 中发送附件邮件的示例: ```python from django.core.mail import EmailMessage msg = EmailMessage('邮件主题', '邮件正文', 'from@example.com', ['to@example.com']) msg.content_subtype = "html" # 设置内容类型为 HTML(可选) msg.attach_file('path_to_attachment.pdf') # 添加附件 msg.send() ``` ### 注意事项 1. **SMTP 服务器配置**:确保使用正确的 SMTP 服务器地址和端口号,例如 Gmail 的 SMTP 地址为 `smtp.gmail.com`,端口为 `587`。 2. **身份验证**:发送邮件时需要提供有效的用户名和密码。 3. **附件编码**:使用 `encoders.encode_base64()` 对附件进行 Base64 编码,以确保文件在传输过程中不会损坏。 4. **异常处理**:在实际应用中,应入异常处理机制以确保程序的稳定性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值