python 发送邮件

今天接触下python邮件发送
中间遇到几个坑
自己的实验文件名称不能是 email 否则就会报错文件冲突


QQ 发送普通邮件


import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_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 ret


ret = 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 smtplib
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.mime.application import MIMEApplication

    if __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) # 打印错误

 

posted @ 2019-02-25 21:34  sin涛涛  阅读(326)  评论(0编辑  收藏  举报