自动发送电子邮件函数

 注意:此函数只有发送文本和附件的两个功能。群发时候有时会被系统检测为垃圾文件,但是把收件人改为网易邮箱,就不会被检测,但是邮件被归类进入网易邮箱的垃圾箱。

def send_email(sender_name,sender_pwd,receiver_name,email_title,email_content,host_server,content_address,add_attachment=False,attachment_name=0,off_quit=True):
    """
    参数:
    sender_name: 发件人(string).
    sender_pwd: 授权码(string).
    receiver_name: 收件人(list).
    email_title: 邮件主题(string).
    email_content: 邮件正文(string).
    host_server: 邮箱服务器地址(string).
    add_attachment: 是否添加附件,默认为 False.
    content_address: 内容地址(list).
    attachment_name: 附件命名(list),可以默认.
    off_quit: 是否退出登录,默认为 True.
    """
    #导入库
    import smtplib #操作SMTP协议的库
    from smtplib import SMTP #加密邮件内容
    from email.mime.text import MIMEText  #构建邮件的正文
    from email.mime.application import MIMEApplication  #添加附加需要打开本地文件
    from email.header import Header  #邮件头,里面包括邮件标题,收件人等
    from email.mime.multipart import MIMEMultipart  #封装邮件,构建邮件主体

        
    #向邮件里添加内容
    for i_receiver_name in receiver_name:
        msg = MIMEMultipart()  #初始化邮寄主体
        msg["Subject"] = Header(email_title,"utf-8")
        msg["From"] = sender_name
        msg["To"] = i_receiver_name
        msg.attach(MIMEText(email_content,"plain","utf-8"))  #邮件内容加入主体中

    #向邮箱添加附件
    if(add_attachment==True):
        if(attachment_name!=0):
            for a in [*zip(content_address,attachment_name)]:
                attachment = MIMEApplication(open(a[0],"rb").read())#读取本地 
                attachment.add_header("Content-Disposition","attachment",filename=a[1])
                msg.attach(attachment)
        else:
            i=0
            for a in content_address:
                attachment = MIMEApplication(open(a,"rb").read())#读取本地 
                name="这是第"+str(i+1)+"附件"
                attachment.add_header("Content-Disposition","attachment",filename=name)
                msg.attach(attachment)

    #设置邮箱服务器地址及端口
    host_server_ = host_server  #网易邮箱服务器的地址
    smtp = SMTP(host_server_,25) 
    smtp.set_debuglevel(1)

    #登录邮箱
    smtp.login(sender_name,sender_pwd)

    #发送邮件
    for i_receiver_name in receiver_name:
        smtp.sendmail(sender_name,i_receiver_name,msg.as_string())
    print("发送成功!")
    if(off_quit==True):  #退出
        smtp.quit()

  

posted @ 2020-01-12 23:13  数据骆驼  阅读(143)  评论(0)    收藏  举报