发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx

上传人:b****4 文档编号:17692318 上传时间:2022-12-08 格式:DOCX 页数:26 大小:20.47KB
下载 相关 举报
发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx_第1页
第1页 / 共26页
发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx_第2页
第2页 / 共26页
发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx_第3页
第3页 / 共26页
发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx_第4页
第4页 / 共26页
发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx

《发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx》由会员分享,可在线阅读,更多相关《发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

发送邮件及邮件附件java代码实例支持多附件群发送文档格式.docx

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类型,如果没找到,则返回

*所指定的默认类型。

*@param

*文件名

*@return返回文件对应的MIME类型。

privateStringgetPartContentType(String){

Stringret=null;

if(null!

=){

intflag=("

."

if(0<

=flag&

&

flag<

()-1){

=(flag+1);

ret=contentTypeMap.get();

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

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

=attachmentContent&

0<

attachmentContent.length()){

sbd.append(getBoundaryNextPart()).append(LINE_END);

sbd.append("

Content-Type:

"

sbd.append(attachment.getContentType());

sbd.append(LINE_END);

Content-Transfer-Encoding:

sbd.append(attachment.getContentTransferEncoding());

if(i!

=partCount-1){

Content-Disposition:

sbd.append(attachment.getContentDisposition());

sbd.append(attachment.getContent());

//sbd.append(boundaryNextPart).

//append(LINE_END);

partSet.clear();

returnsbd.toString();

*添加邮件正文单元

privatevoidaddContent(){

=content){

MailPartpart=newMailPart();

part.setContent(toBase64(content));

part.setContentType("

text/plain;

charset=\"

+charset+"

\"

partSet.add(part);

privateStringlistToMailString(List<

mailAddressList){

StringBuildersbd=newStringBuilder();

=mailAddressList){

intlistSize=mailAddressList.size();

for(inti=0;

i<

listSize;

i++){

if(0!

=i){

<

).append(mailAddressList.get(i)).append("

>

getrecipient(){

List<

list=newArrayList<

list.addAll(to);

list.addAll(cc);

list.addAll(bcc);

returnlist;

*添加一个附件单元

*文件路径

publicvoidaddAttachment(String){

addAttachment(,null);

publicvoidaddTo(StringmailAddress){

this.to.add(mailAddress);

publicvoidaddCc(StringmailAddress){

this.cc.add(mailAddress);

publicvoidaddBcc(StringmailAddress){

this.bcc.add(mailAddress);

*文件编码格式

publicvoidaddAttachment(String,Stringcharset){

=&

()>

0){

=new);

addAttachment((),new(file),

charset);

}catch(e){

System.out.println("

错误:

+e.getMessage());

System.exit

(1);

*@paramattachmentStream

*文件流

publicvoidaddAttachment(String,InputStreamattachmentStream,

Stringcharset){

byte[]bs=null;

=attachmentStream){

intbuffSize=1024;

byte[]buff=newbyte[buffSize];

byte[]temp;

bs=newbyte[0];

intreadTotal=0;

while(-1!

=(readTotal=attachmentStream.read(buff))){

temp=newbyte[bs.length];

System.arraycopy(bs,0,temp,0,bs.length);

bs=newbyte[temp.length+readTotal];

System.arraycopy(temp,0,bs,0,temp.length);

System.arraycopy(buff,0,bs,temp.length,readTotal);

=bs){

MailPartattachmentPart=newMailPart();

charset=null!

=charset?

charset:

Charset.defaultCharset()

.name();

StringcontentType=getPartContentType()

+"

name=\"

=?

?

B?

+toBase64()

=\"

attachmentPart.setCharset(charset);

attachmentPart.setContentType(contentType);

attachmentPart.setContentDisposition("

attachment;

+toBase64()+"

attachmentPart.setContent(toBase64(bs));

partSet.add(attachmentPart);

}catch(Exceptione){

}finally{

attachmentStream.close();

attachmentStream=null;

}catch(IOExceptione){

Runtime.getRuntime().gc();

Runtime.getRuntime().runFinalization();

*发送邮件

*@return邮件服务器反回的信息

publicStringsend(){

//对象申明

//当邮件发送完毕后,以下三个对象(Socket、

//PrintWriter,

//BufferedReader)需要关闭。

Socketsocket=null;

PrintWriterpw=null;

BufferedReaderbr=null;

socket=newSocket(host,25);

pw=newPrintWriter(socket.getOutputStream());

br=newBufferedReader(newInputStreamReader(socket

.getInputStream()));

StringBuilderinfoBuilder=newStringBuilder(

\nServerinfo:

\n------------\n"

//与服务器建立连接

pw.write("

HELO"

.concat(host).concat(LINE_END));

//连接到邮件服务

if(!

readResponse(pw,br,infoBuilder,"

220"

))

returninfoBuilder.toString();

AUTHLOGIN"

.concat(LINE_END));

//登录

250"

pw.write(toBase64(user).concat(LINE_END));

//输入用户名

334"

pw.write(toBase64(password).c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1