日常项目中,经常会遇到在某些事件发生时,需要给特定的人员(运维同事)发送报警邮件,具体实现方法比较多, 我们这里讲一下,如何使用python 的smtplib库来发送邮件。
这里以163邮箱为例,具体代码如下:
def send_email_with_attachment(sender, password, receiver, subject, content, attachment_path):
# 创建邮件对象
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receiver
# 添加正文内容
msg.attach(MIMEText(content, 'plain', 'utf-8'))
# 添加附件
with open(attachment_path, 'rb') as file:
part = MIMEBase('application', 'octet-stream')
part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename=attachment_path.split('/')[-1])
msg.attach(part)
# 连接服务器并发送邮件
try:
server = smtplib.SMTP('smtp.163.com', 25)
server.starttls()
server.login(sender, password)
server.sendmail(sender, receiver, msg.as_string())
server.quit()
print("email send successfully")
except Exception as e:
print("email send to be fail, exception is ", e)
if __name__=='__main__':
sender=''xxx@163.com
password='yyyyyy'
receiver='xxx@126.com'
subject='study'
content='day day up'
attachment_path='aa/xxx.xmind'
common.send_email_with_attachment(sender,password, receiver, subject, content, attachment_path)
运行程序的时候,会报(550, b'User has no permission')异常, 提示该程序没有权限发送邮件,主要原因是,使用第三方程序来发送163邮件时,需要163邮箱服务器开启授权。
具体开启授权的方法如下:
需要先登录网易邮箱(访问邮箱登录页面),在“设置”-“POP3/SMTP/IMAP” 中开启如下服务:
开启服务:IMAP/SMTP服务 已开启 (点击开启,会提示用邮箱绑定的手机发送验证码来开启这个服务。,发送成功后,该选项就会显示开启状态,并弹出框,显示一个授权登录的密码xxxxxxxx, 然后第三方程序发邮件时,使用的该邮箱的密码就填这个授权登录的密码(不是邮箱的本身的登录密码哦))
修改发邮件程序,将password 内容设置为授权登录密码,然后再次运行程序,既可以正常发送邮件了。