python发送html邮件(带图片)

#!/usr/bin/env python3
# coding: utf-8
import  smtplib
from  email.mime.multipart  import  MIMEMultipart
from  email.mime.text  import  MIMEText
from  email.mime.image  import  MIMEImage
import  os
 
'''
发送多张图片邮件的python代码
'''
img_list  =  '图片所在的文件夹'
allfile = []
 
'''
遍历文件夹获得所有图片绝对路径
'''
def  getallfile(path):
     allfilelist = os.listdir(path)
     for  file  in  allfilelist:
         filepath = os.path.join(path, file )
         if  os.path.isdir(filepath):
             getallfile(filepath)
         else :
             allfile.append(filepath)
     return  allfile
 
 
def  sendmail(filelist):
     sender  =  'aaa@.ddd.com'
     receiver  =  'bbb@.eee.com'
     subject  =  'python email with pictures'
     smtpserver  =  'smtp.sina.com.cn'
 
     msgRoot  =  MIMEMultipart( 'related' )
     msgRoot[ 'Subject' =  'python email'
     '''
     图片id加入所在位置 
     '''
     content  =  '<b>Some <i>HTML</i> text</b> and an image.<br>'
     for  index  in  range ( len (filelist)):
         if  index  %  2  = =  0 :
             content  + =  '<img src="cid:' + str (index) + '"><br>'
         else :
             content  + =  '<img src="cid:'  +  str (index)  +  '">'
 
     msgText  =  MIMEText(content,  'html' 'utf-8' )
     msgRoot.attach(msgText)
     
     '''
     将图片和id位置对应起来
     '''
     index  =  0
     for  file  in  filelist:
         fp  =  open ( file 'rb' )
         msgImage  =  MIMEImage(fp.read())
         fp.close()
         msgImage.add_header( 'Content-ID' '<' + str (index) + '>' )
         index  + =  1
         msgRoot.attach(msgImage)
 
     smtp  =  smtplib.SMTP()
     smtp.connect(smtpserver)
     smtp.sendmail(sender, receiver, msgRoot.as_string())
     smtp.quit()
 
 
if  __name__  = =  '__main__' :
     sendmail(getallfile(img_list))

 

java版本:

 

import  javax.activation.DataHandler;
import  javax.activation.FileDataSource;
import  javax.mail.*;
import  javax.mail.internet.InternetAddress;
import  javax.mail.internet.MimeBodyPart;
import  javax.mail.internet.MimeMessage;
import  javax.mail.internet.MimeMultipart;
import  java.io.File;
import  java.util.*;
import  java.util.Map.Entry;
 
/**
  *
  * @author zongrun.yang
  *
  */
public  class  SendMail {
     private  static  final  Properties prop =  new  Properties();
     // 发送邮件的服务器
     private  static  final  String host =  "" ;
 
     static  {
         prop.put( "mail.smtp.host" , host);
     }
 
 
     static  List<String> picture_list =  new  ArrayList<String>();
 
     public  static  List<String> getFileList(String strPath){
         File f= new  File(strPath);
         try  {
             if (f.isDirectory()){
                 File[] fs=f.listFiles();
                 for ( int  i= 0 ;i<fs.length;i++){
                     String fsPath=fs[i].getAbsolutePath();
                     getFileList(fsPath);
                 }
             } else  if (f.isFile()){
                 String fname=f.getAbsolutePath();
                 //System.out.println(fname);
                 picture_list.add(fname);
             } else {
                 System.out.println( "路径不正确!" );
             }
         } catch  (Exception e) {
             System.out.println( "遍历异常" );
         }
         return  picture_list;
     }
 
     public  static  void  main(String[] args)  throws  Exception {
         String path =  "path" ;
         String from =  "data@d.com" ;
         String subject =  "日报" ;
         String content= "<p>日报</p><br/>" ;
         String to =  "aaaa@ccc.com" ;
         String cc =  "bbbb@dddd.com" ;
         sendPictureMail(from,subject,content,cc,to,path);
     }
 
     public  static  void  sendPictureMail(String fromAddress,String subject,String content,String receivers,String cc,String path)  throws  Exception {
 
         Map<String, String> image =  new  HashMap<String, String>();
 
         List<String> fileList = SendMailcopy.getFileList(path);
         System.out.println(fileList.size());
         for  ( int  i =  0 ; i < fileList.size(); i++) {
             image.put(i +  "" , fileList.get(i));
             if  (i %  2  ==  0 ) {
                 content +=  "<img src=\"cid:"  + i +  "\"><br/><br/>" ;
             else  {
                 content +=  "<img src=\"cid:"  + i +  "\">" ;
             }
         }
         Session session = Session.getInstance(prop);
 
         MimeMessage message =  new  MimeMessage(session);
         message.setFrom( new  InternetAddress(fromAddress));
 
         String[] toAddrs = receivers.split( ";" );
         if  (toAddrs.length >  0 ) {
             Address[] addressList =  new  Address[toAddrs.length];
             int  index =  0 ;
             for  (String toAddr : toAddrs) {
                 //if (StringUtils.isNotBlank(toAddr)) {
                     addressList[index++] =  new  InternetAddress(toAddr);
                 //}
             }
             String[] ccAddrs = cc.split( ";" );
             Address[] ccList =  new  Address[ccAddrs.length];
             int  index2 =  0 ;
             for  (String ccAddr : ccAddrs) {
                 //if (StringUtils.isNotEmpty(ccAddr)) {
                     ccList[index2++] =  new  InternetAddress(ccAddr);
                 //}
             }
             message.setRecipients(Message.RecipientType.CC, ccList);
 
             message.setRecipients(Message.RecipientType.TO, addressList);
             message.setSubject(subject);
 
             MimeMultipart allMultipart =  new  MimeMultipart();
 
             MimeBodyPart contentPart =  new  MimeBodyPart();
             MimeMultipart contentMultipart =  new  MimeMultipart( "related" );
 
             MimeBodyPart htmlbodypart =  new  MimeBodyPart();
             htmlbodypart.setContent(content,  "text/html;charset=UTF-8" );
             contentMultipart.addBodyPart(htmlbodypart);
 
             if  (image !=  null  && image.size() >  0 ) {
                 Set<Entry<String, String>> set = image.entrySet();
                 for  (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
                     Entry<String, String> entry = (Entry<String, String>) iterator.next();
 
                     //创建用于保存图片的MimeBodyPart对象,并将它保存到MimeMultipart中
                     MimeBodyPart gifBodyPart =  new  MimeBodyPart();
                     //图片所在的目录的绝对路径
                     FileDataSource fds =  new  FileDataSource(entry.getValue());
 
                     gifBodyPart.setDataHandler( new  DataHandler(fds));
                     //cid的值
                     gifBodyPart.setContentID(entry.getKey());
                     contentMultipart.addBodyPart(gifBodyPart);
                 }
             }
             contentPart.setContent(contentMultipart);
             allMultipart.addBodyPart(contentPart);
             message.setContent(allMultipart);
             message.saveChanges();
             Transport.send(message);
         }
     }
 
}

 

转载于:https://www.cnblogs.com/yangzrun/p/9115186.html

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
<p> 欢迎参加英特尔® OpenVINO™工具套件初级课程 !本课程面向零基础学员,将从AI的基本概念开始,介绍人工智能与视觉应用的相关知识,并且帮助您快速理解英特尔® OpenVINO™工具套件的基本概念以及应用场景。整个课程包含了视频的处理,深度学习的相关知识,人工智能应用的推理加速,以及英特尔® OpenVINO™工具套件的Demo演示。通过本课程的学习,将帮助您快速上手计算机视觉的基本知识和英特尔® OpenVINO™ 工具套件的相关概念。 </p> <p> 为保证您顺利收听课程参与测试获取证书,还请您于<strong>电脑端</strong>进行课程收听学习! </p> <p> 为了便于您更好的学习本次课程,推荐您免费<strong>下载英特尔® OpenVINO™工具套件</strong>,下载地址:https://t.csdnimg.cn/yOf5 </p> <p> 收听课程并完成章节测试,可获得本课程<strong>专属定制证书</strong>,还可参与<strong>福利抽奖</strong>,活动详情:https://bss.csdn.net/m/topic/intel_openvino </p> <p> 8月1日-9月30日,学习完成【初级课程】的小伙伴,可以<span style="color:#FF0000;"><strong>免费学习【中级课程】</strong></span>,中级课程免费学习优惠券将在学完初级课程后的7个工作日内发送至您的账户,您可以在:<a href="https://i.csdn.net/#/wallet/coupon">https://i.csdn.net/#/wallet/coupon</a>查询优惠券情况,请大家报名初级课程后尽快学习哦~ </p> <p> <span style="font-size:12px;">请注意:点击报名即表示您确认您已年满18周岁,并且同意CSDN基于商务需求收集并使用您的个人信息,用于注册OpenVINO™工具套件及其课程。CSDN和英特尔会为您定制最新的科学技术和行业信息,将通过邮件或者短信的形式推送给您,您也可以随时取消订阅不再从CSDN或Intel接收此类信息。 查看更多详细信息请点击CSDN“<a href="https://passport.csdn.net/service">用户服务协议</a>”,英特尔“<a href="https://www.intel.cn/content/www/cn/zh/privacy/intel-privacy-notice.html?_ga=2.83783126.1562103805.1560759984-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">隐私声明</a>”和“<a href="https://www.intel.cn/content/www/cn/zh/legal/terms-of-use.html?_ga=2.84823001.1188745750.1560759986-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">使用条款</a>”。</span> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页