发送邮件时,需写对应的邮箱服务器及端口号
注:邮件发多了会被拒,发不出去!!!
#!/user/bin/python# -*- coding:utf-8 -*-import smtplibfrom email.mime.base import MIMEBasefrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerfrom email import encoders# Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。def get_email_obj(email_subject, email_from, to_addr_list): ''' 构造邮件对象,并设置邮件主题、发件人、收件人,最后返回邮件对象 :param email_subject:邮件主题 :param email_from:发件人 :param to_addr_list:收件人列表 :return :邮件对象 email_obj ''' # 构造 MIMEMultipart 对象做为根容器 email_obj = MIMEMultipart() email_to = ','.join(to_addr_list) # 将收件人地址用“,”连接 # 邮件主题、发件人、收件人 email_obj['Subject'] = Header(email_subject, 'utf-8') email_obj['From'] = Header(email_from, 'utf-8') email_obj['To'] = Header(email_to, 'utf-8') return email_objdef attach_content(email_obj, email_content, content_type='plain', charset='utf-8'): ''' 创建邮件正文,并将其附加到跟容器:邮件正文可以是纯文本,也可以是HTML(为HTML时,需设置content_type值为 'html') :param email_obj:邮件对象 :param email_content:邮件正文内容 :param content_type:邮件内容格式 'plain'、'html'..,默认为纯文本格式 'plain' :param charset:编码格式,默认为 utf-8 :return: ''' content = MIMEText(email_content, content_type, charset) # 创建邮件正文对象 email_obj.attach(content) # 将邮件正文附加到根容器def attach_part(email_obj, source_path, part_name): ''' 添加附件:附件可以为照片,也可以是文档 :param email_obj:邮件对象 :param source_path:附件源文件路径 :param part_name:附件名 :return: ''' part = MIMEBase('application', 'octet-stream') # 'octet-stream': binary data 创建附件对象 part.set_payload(open(source_path, 'rb').read()) # 将附件源文件加载到附件对象 encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment', filename=('gbk', '', '%s' % part_name)) # 给附件添加头文件 email_obj.attach(part) # 将附件附加到根容器def send_email(email_obj, email_host, host_port, from_addr, pwd, to_addr_list): ''' 发送邮件 :param email_obj:邮件对象 :param email_host:SMTP服务器主机 :param host_port:SMTP服务端口号 :param from_addr:发件地址 :param pwd:发件地址的授权码,而非密码 :param to_addr_list:收件地址 :return:发送成功,返回 True;发送失败,返回 False ''' try: ''' # import smtplib # smtp_obj = smtplib.SMTP([host[, port[, local_hostname]]] ) # host: SMTP服务器主机。 # port: SMTP服务端口号,一般情况下SMTP端口号为25。 # smtp_obj = smtplib.SMTP('smtp.qq.com', 25) ''' smtp_obj = smtplib.SMTP_SSL(email_host, host_port) # 连接 smtp 邮件服务器 smtp_obj.login(from_addr, pwd) smtp_obj.sendmail(from_addr, to_addr_list, email_obj.as_string()) # 发送邮件:email_obj.as_string():发送的信息 smtp_obj.quit() # 关闭连接 print("发送成功!") return True except smtplib.SMTPException: print("发送失败!") return Falseif __name__ == "__main__": # (QQ邮箱) email_host = "smtp.qq.com" # smtp 邮件服务器 host_port = 465 # smtp 邮件服务器端口:SSL 连接 from_addr = "发件地址" # 发件地址 pwd = "授权码" # 发件地址的授权码,而非密码 # (163邮箱) # email_host = "smtp.163.com" # smtp 邮件服务器 # host_port = 465 # smtp 邮件服务器端口:SSL 连接 # from_addr = "发件地址" # 发件地址 # pwd = "授权码" # 发件地址的授权码,而非密码 to_addr_list = ["邮箱1", "邮箱2"] # 收件地址 email_content = "邮件主题" email_content_html = """Python 邮件发送...
图片:
""" email_subject = "邮件主题" email_from = "发件人" source_path = r"D:\我的文档\My Pictures\avatar.jpg" part_name = 'avatar.png' email_obj = get_email_obj(email_subject, email_from, to_addr_list) attach_content(email_obj, email_content) attach_part(email_obj, source_path, part_name) send_email(email_obj, email_host, host_port, from_addr, pwd, to_addr_list)