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);
         }
     }
 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM