网络编程
位置:首页>> 网络编程>> Python编程>> python3实现带多张图片、附件的邮件发送

python3实现带多张图片、附件的邮件发送

作者:SoaringXu  发布时间:2023-05-11 06:51:10 

标签:python3,邮件发送

本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下

直接上代码,没有注释!


from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header

class Mail(object):
 def __init__(self, host, nickname, username, password, postfix):
   self.host = host
   self.nickname = nickname
   self.username = username
   self.password = password
   self.postfix = postfix

def send_mail(self, to_list, subject, content, cc_list=[], encode='gbk', is_html=True, images=[]):
   me = str(Header(self.nickname, encode)) + "<" + self.username + "@" + self.postfix + ">"
   msg = MIMEMultipart()
   msg['Subject'] = Header(subject, encode)
   msg['From'] = me
   msg['To'] = ','.join(to_list)
   msg['Cc'] = ','.join(cc_list)
   if is_html:
     mail_msg = ''
     for i in range(len(images)):
       mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)
     msg.attach(MIMEText(content + mail_msg, 'html', 'utf-8'))

for i, img_name in enumerate(images):
       with open(img_name, 'rb') as fp:
         img_data = fp.read()
       msg_image = MIMEImage(img_data)
       msg_image.add_header('Content-ID', '<image%d>' % (i+1))
       msg.attach(msg_image)
       # 将图片作为附件
       # image = MIMEImage(img_data, _subtype='octet-stream')
       # image.add_header('Content-Disposition', 'attachment', filename=images[i])
       # msg.attach(image)
   else:
     msg_content = MIMEText(content, 'plain', encode)
     msg.attach(msg_content)

try:
     s = smtplib.SMTP()
     # s.set_debuglevel(1)
     s.connect(self.host)
     s.login(self.username, self.password)
     s.sendmail(me, to_list + cc_list, msg.as_string())
     s.quit()
     s.close()
     return True
   except Exception as e:
     print(e)
     return False

def send_mail(to_list, title, content, cc_list=[], encode='utf-8', is_html=True, images=[]):
 content = '<pre>%s</pre>' % content
 m = Mail('smtp.163.com', 'TV-APP TEST', 'tvapp_qa', 'ujlnluutpfespgxz', '163.com')
 m.send_mail(to_list, title, content, cc_list, encode, is_html, images)

if __name__ == '__main__':
 images = [
   '1.png',
   '2.png',
   '3.png',
   '4.png',
 ]
 import time
 title = 'new images %s' % time.strftime('%H:%M:%S')
 content = 'this is attach images %s' % time.time()
 send_mail(['x@163.com'], title, content, ['xx@163.com', 'xxx@163.com'], 'utf-8', True, images)

后记

调试发送多张图片的时候遇到的问题:

用for循环生成的mail_msg,不能直接attach,需要和content一起attach


mail_msg = ''
for i in range(len(images)):
 mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)
 msg.attach(MIMEText(**content** + mail_msg, 'html', 'utf-8'))

来源:https://blog.csdn.net/weixin_44152831/article/details/89214911

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com