java发送邮件及邮件附件代码实例复习过程Word格式文档下载.docx
《java发送邮件及邮件附件代码实例复习过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java发送邮件及邮件附件代码实例复习过程Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
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;
*收件人邮箱地址
privateList<
String>
to;
*抄送地址
cc;
*暗送地址
bcc;
*邮件主题
privateStringsubject;
*用户名
privateStringuser;
*密码
privateStringpassword;
*MIME邮件类型
privateStringcontentType;
*用来绑定多个邮件单元{@link#partSet}
*的分隔标识,我们可以将邮件的正文及每一个附件都看作是一个邮件单元
*。
privateStringboundary;
*邮件单元分隔标识符,该属性将用来在邮件中作为分割各个邮件单元的标识
privateStringboundaryNextPart;
*传输邮件所采用的编码
privateStringcontentTransferEncoding;
*设置邮件正文所用的字符集
privateStringcharset;
*内容描述
privateStringcontentDisposition;
*邮件正文
privateStringcontent;
*发送邮件日期的显示格式
privateStringsimpleDatePattern;
*附件的默认MIME类型
privateStringdefaultAttachmentContentType;
*邮件单元的集合,用来存放正文单元和所有的附件单元。
MailPart>
partSet;
*不同类型文件对应的{@linkMIME}类型映射。
在添加附件
*{@link#addAttachment(String)}
*时,程序会在这个映射中查找对应文件的{@linkMIME}
*类型,如果没有,则使用
*{@link#defaultAttachmentContentType}
*所定义的类型。
privatestaticMap<
String,String>
contentTypeMap;
static{
//MIMEMediaTypes
contentTypeMap=newHashMap<
();
contentTypeMap.put("
xls"
"
application/vnd.ms-excel"
);
xlsx"
xlsm"
xlsb"
doc"
application/msword"
dot"
docx"
docm"
dotm"
}
*该类用来实例化一个正文单元或附件单元对象,他继承了
*{@linkMail}
*,在这里制作这个子类主要是为了区别邮件单元对象和邮件服务对象
*,使程序易读一些。
这些邮件单元全部会放到partSet
*中,在发送邮件{@link#send()}时,程序会调用
*{@link#getAllParts()}
*方法将所有的单元合并成一个符合MIME格式的字符串。
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=newArrayList<
to=newArrayList<
cc=newArrayList<
bcc=newArrayList<
*根据指定的完整文件名在
*{@link#contentTypeMap}
*中查找其相应的MIME类型,如果没找到,则返回
*所指定的默认类型。
*@paramfileName
*文件名
*@return返回文件对应的MIME类型。
privateStringgetPartContentType(StringfileName){
Stringret=null;
if(null!
=fileName){
intflag=fileName.lastIndexOf("
."
if(0<
=flag&
&
flag<
fileName.length()-1){
fileName=fileName.substring(flag+1);
ret=contentTypeMap.get(fileName);
if(null==ret){
ret=defaultAttachmentContentType;
returnret;
*将给定字符串转换为base64编码的字符串
*@paramstr
*需要转码的字符串
*@paramcharset
*原字符串的编码格式
*@returnbase64编码格式的字符
privateStringtoBase64(Stringstr,Stringcharset){
=str){
try{
returntoBase64(str.getBytes(charset));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
return"
"
*将指定的字节数组转换为base64格式的字符串
*@parambs
*需要转码的字节数组
privateStringtoBase64(byte[]bs){
returnnewBASE64Encoder().encode(bs);
*@returnbase