java发送邮件及邮件附件代码实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

packagecom.zlz3907.mail;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.io.UnsupportedEncodingException;importjava.net.Socket;importjava.nio.charset.Charset;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importsun.misc.BASE64Encoder;/***该类使用Socket连接到邮件服务器,*并实现了向指定邮箱发送邮件及附件的功能。**@authorZhongLizhi*/publicclassMail{/***换行符*/privatestaticfinalStringLINE_END=\r\n;/***值为“true”输出高度信息(包括服务器响应信息),值为“*false”则不输出调试信息。*/privatebooleanisDebug=true;/***值为“true”则在发送邮件{@linkMail#send()}*过程中会读取服务器端返回的消息,*并在邮件发送完毕后将这些消息返回给用户。*/privatebooleanisAllowReadSocketInfo=true;/***邮件服务器地址*/privateStringhost;/***发件人邮箱地址*/privateStringfrom;/***收件人邮箱地址*/privateListStringto;/***抄送地址*/privateListStringcc;/***暗送地址*/privateListStringbcc;/***邮件主题*/privateStringsubject;/***用户名*/privateStringuser;/***密码*/privateStringpassword;/***MIME邮件类型*/privateStringcontentType;/***用来绑定多个邮件单元{@link#partSet}*的分隔标识,我们可以将邮件的正文及每一个附件都看作是一个邮件单元*。*/privateStringboundary;/***邮件单元分隔标识符,该属性将用来在邮件中作为分割各个邮件单元的标识*。*/privateStringboundaryNextPart;/***传输邮件所采用的编码*/privateStringcontentTransferEncoding;/***设置邮件正文所用的字符集*/privateStringcharset;/***内容描述*/privateStringcontentDisposition;/***邮件正文*/privateStringcontent;/***发送邮件日期的显示格式*/privateStringsimpleDatePattern;/***附件的默认MIME类型*/privateStringdefaultAttachmentContentType;/***邮件单元的集合,用来存放正文单元和所有的附件单元。*/privateListMailPartpartSet;/***不同类型文件对应的{@linkMIME}类型映射。在添加附件*{@link#addAttachment(String)}*时,程序会在这个映射中查找对应文件的{@linkMIME}*类型,如果没有,则使用*{@link#defaultAttachmentContentType}*所定义的类型。*/privatestaticMapString,StringcontentTypeMap;static{//MIMEMediaTypescontentTypeMap=newHashMapString,String();contentTypeMap.put(xls,application/vnd.ms-excel);contentTypeMap.put(xlsx,application/vnd.ms-excel);contentTypeMap.put(xlsm,application/vnd.ms-excel);contentTypeMap.put(xlsb,application/vnd.ms-excel);contentTypeMap.put(doc,application/msword);contentTypeMap.put(dot,application/msword);contentTypeMap.put(docx,application/msword);contentTypeMap.put(docm,application/msword);contentTypeMap.put(dotm,application/msword);}/***该类用来实例化一个正文单元或附件单元对象,他继承了*{@linkMail}*,在这里制作这个子类主要是为了区别邮件单元对象和邮件服务对象*,使程序易读一些。这些邮件单元全部会放到partSet*中,在发送邮件{@link#send()}时,程序会调用*{@link#getAllParts()}*方法将所有的单元合并成一个符合MIME格式的字符串。**@authorZhongLizhi*/privateclassMailPartextendsMail{publicMailPart(){}}/***默认构造函数*/publicMail(){defaultAttachmentContentType=application/octet-stream;simpleDatePattern=yyyy-MM-ddHH:mm:ss;boundary=--=_NextPart_zlz_3907_+System.currentTimeMillis();boundaryNextPart=--+boundary;contentTransferEncoding=base64;contentType=multipart/alternative;charset=Charset.defaultCharset().name();partSet=newArrayListMailPart();to=newArrayListString();cc=newArrayListString();bcc=newArrayListString();}/***根据指定的完整文件名在*{@link#contentTypeMap}*中查找其相应的MIME类型,如果没找到,则返回*{@link#defaultAttachmentContentType}*所指定的默认类型。**@paramfileName*文件名*@return返回文件对应的MIME类型。*/privateStringgetPartContentType(StringfileName){Stringret=null;if(null!=fileName){intflag=fileName.lastIndexOf(.);if(0=flag&&flagfileName.length()-1){fileName=fileName.substring(flag+1);}ret=contentTypeMap.get(fileName);}if(null==ret){ret=defaultAttachmentContentType;}returnret;}/***将给定字符串转换为base64编码的字符串**@paramstr*需要转码的字符串*@paramcharset*原字符串的编码格式*@returnbase64编码格式的字符*/privateStringtoBase64(Stringstr,Stringcharset){if(null!=str){try{returntoBase64(str.getBytes(charset));}catch(UnsupportedEncodingExceptione){e.printStackTrace();}}return;}/***将指定的字节数组转换为base64格式的字符串**@parambs*需要转码的字节数组*@returnbase64编码格式的字符*/privateStringtoBase64(byte[]bs){returnnewBASE64Encoder().encode(bs);}/***将给定字符串转换为base64编码的字符串**@paramstr*需要转码的字符串*@returnbase64编码格式的字符*/privateStringtoBase64(Stringstr){returntoBase64(str,Charset.defaultCharset().name());}/***将所有的邮件单元按照标准的MIME格式要求合并。**@return返回一个所有单元合并后的字符串。*/privateStringgetAllParts(){intpartCount=partSet.size();StringBuildersbd=newStringBuilder(LINE_END);for(inti=partCount-1;i=0;i--){Mailattachment=partSet.get(i);StringattachmentContent=attachment.getContent();if(null!=attachmentContent&&0attachmentContent.length()){sbd.append(getBoundaryNextPart()).append(LINE_END);sbd.append(Content-Type:);sbd.append(attachment.getContentType());sbd.append(LINE_END);sbd.append(Content-Transfer-Encoding:);sbd.append(attachment.getContentTransferEncoding());sbd.append(LINE_END);if(i!=partCount-1){sbd.append(Content-Disposition:);sbd.append(attachment.getContentDisposition());sbd.append(LINE_END);}sbd.append(LINE_END);sbd.append(attachment.getContent());sbd.append(LINE_END);}}sbd.append(LINE_END);sbd.append(LINE_END);//sbd.append(boundaryNextPart).//append(LINE_END);partSet.clear();returnsbd.toString();}/***添加邮件正文单元*/privatevoidaddContent(){if(null!=content){MailPartpart=newMailPart();part.setContent(toBase64(content));part.setConte

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功