python发送html邮件(带图片)
#!/usr/bin/env python3# coding: utf-8import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImageimport 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 allfiledef 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); } }} |
浙公网安备 33010602011771号