python 发送邮件

折月煮酒 提交于 2020-01-04 22:59:01
今天接触下python邮件发送中间遇到几个坑 自己的实验文件名称不能是  email  否则就会报错文件冲突
QQ 发送普通邮件import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrmy_sender = 'xxxxxxxx@qq.com'  # 发件人邮箱账号my_pass = 'xxxxxxxxxxxxxxxx'  # 发件人邮箱密码my_user = 'xxxxxxx@qq.com'  # 收件人邮箱账号,我这边发送给自己def mail():    ret = True    try:        msg = MIMEText('两相忘,自惆怅,\n悲欢泪,心渐碎,\n恨离愁,几杯浊酒泪直流', 'plain', 'utf-8')  # 邮件内容        msg['From'] = formataddr(["FromRunoob", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号        msg['To'] = formataddr(["FK", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号        msg['Subject'] = "送你一首诗"  # 邮件的主题,也可以说是标题        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码        server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件        server.quit()  # 关闭连接    except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False        ret = False    return retret = mail()if ret:    print("邮件发送成功")else:    print("邮件发送失败")

Python 简单发送邮件 / 发送带各种附件邮件

写个自动发送邮件的python脚本。

用脚本发送邮件思路是:登陆邮箱-->写邮件-->发送邮件

发送邮箱设置:

得开通自己邮箱的 SMTP 功能,具体可百度。

以163网易邮箱为例: 设置 -->  POP3/SMTP/IMAP  -->  设置POP3/SMTP/IMAP 勾选保存

一、发送简单邮件:

用STMP库

  1.  
    import smtplib
  2.  
    #发送字符串的邮件
  3.  
    from email.mime.text import MIMEText
  4.  
    #处理多种形态的邮件主体我们需要 MIMEMultipart 类
  5.  
    from email.mime.multipart import MIMEMultipart
  6.  
    #处理图片需要 MIMEImage 类
  7.  
    from email.mime.image import MIMEImage
  8.  
     
  9.  
    #设置服务器所需信息
  10.  
    fromaddr = '137xxx@163.com'#邮件发送方邮箱地址
  11.  
    password = 'zzz'#密码(部分邮箱为授权码)
  12.  
    toaddrs = ['137xxx@163.com', '137xxxxx@qq.com']#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
  13.  
     
  14.  
     
  15.  
    #设置email信息
  16.  
    #---------------------------发送字符串的邮件-----------------------------
  17.  
    #邮件内容设置
  18.  
    message = MIMEText('hello,ziqiiii','plain','utf-8')
  19.  
    #邮件主题
  20.  
    message['Subject'] = 'ziqiiii test email'
  21.  
    #发送方信息
  22.  
    message['From'] = sender
  23.  
    #接受方信息
  24.  
    message['To'] = receivers[0]
  25.  
    #---------------------------------------------------------------------
  26.  
     
  27.  
     
  28.  
    #登录并发送邮件
  29.  
    try:
  30.  
    server = smtplib.SMTP('smtp.163.com')#163邮箱服务器地址,端口默认为25
  31.  
    server.login(fromaddr,password)
  32.  
    server.sendmail(fromaddr, toaddrs, message.as_string())
  33.  
    print('success')
  34.  
    server.quit()
  35.  
     
  36.  
    except smtplib.SMTPException as e:
  37.  
    print('error',e) #打印错误

 

二、发送各种带附件的邮件

使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。

MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。

最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。

  1. import smtplibfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationif __name__ == '__main__':    fromaddr = 'xxxxxxxxxxx@qq.com'    password = 'xxxxxxxx'    # toaddrs = ['xxxxxxxxxx@qq.com', '137xxxx@qq.com']    toaddrs = ['xxxxxxxxx7@qq.com']    content = 'hello, this is email content.'    textApart = MIMEText(content)图片    imageFile = '1.png'    imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])    imageApart.add_header('Content-Disposition', 'attachment', filename=imageFile)普通文件 txt、html、、、、    pdfFile = 'D:\\HTMLReport.html'    pdfApart = MIMEApplication(open(pdfFile, 'rb').read())    pdfApart.add_header('Content-Disposition', 'attachment', filename=pdfFile)zip文件    zipFile = '算法设计与分析基础第3版PDF.zip'    zipApart = MIMEApplication(open(zipFile, 'rb').read())    zipApart.add_header('Content-Disposition', 'attachment', filename=zipFile)    m = MIMEMultipart()    m.attach(textApart)图片    m.attach(imageApart)普通文件    m.attach(pdfApart)zip文件    m.attach(zipApart)    m['Subject'] = 'title'    try:        server = smtplib.SMTP_SSL("smtp.qq.com", 465)        server.login(fromaddr, password)        server.sendmail(fromaddr, toaddrs, m.as_string())        print('success')        server.quit()    except smtplib.SMTPException as e:        print('error:', e)  # 打印错误

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!