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

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

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

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

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

发送邮件及邮件附件java代码实例支持多附件群发送

以下为Mail。

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;

import.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;

/**

*收件人邮箱地址

*/

privateList〈String〉to;

/**

*抄送地址

*/

privateList〈String〉cc;

/**

*暗送地址

*/

privateListbcc;

/**

*邮件主题

*/

privateStringsubject;

/**

*用户名

*/

privateStringuser;

/**

*密码

*/

privateStringpassword;

/**

*MIME邮件类型

*/

privateStringcontentType;

/**

*用来绑定多个邮件单元{@link#partSet}

*的分隔标识,我们可以将邮件的正文及每一个附件都看作是一个邮件单元

*。

*/

privateStringboundary;

/**

*邮件单元分隔标识符,该属性将用来在邮件中作为分割各个邮件单元的标识

*。

*/

privateStringboundaryNextPart;

/**

*传输邮件所采用的编码

*/

privateStringcontentTransferEncoding;

/**

*设置邮件正文所用的字符集

*/

privateStringcharset;

/**

*内容描述

*/

privateStringcontentDisposition;

/**

*邮件正文

*/

privateStringcontent;

/**

*发送邮件日期的显示格式

*/

privateStringsimpleDatePattern;

/**

*附件的默认MIME类型

*/

privateStringdefaultAttachmentContentType;

/**

*邮件单元的集合,用来存放正文单元和所有的附件单元。

*/

privateList〈MailPart>partSet;

/**

*不同类型文件对应的{@linkMIME}类型映射。

在添加附件

*{@link#addAttachment(String)}

*时,程序会在这个映射中查找对应文件的{@linkMIME}

*类型,如果没有,则使用

*{@link#defaultAttachmentContentType}

*所定义的类型.

*/

privatestaticMap〈String,String〉contentTypeMap;

static{

//MIMEMediaTypes

contentTypeMap=newHashMap〈String,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=newArrayList〈MailPart>();

to=newArrayList

cc=newArrayList();

bcc=newArrayList〈String〉();

}

/**

*根据指定的完整文件名在

*{@link#contentTypeMap}

*中查找其相应的MIME类型,如果没找到,则返回

*{@link#defaultAttachmentContentType}

*所指定的默认类型。

*

*@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){

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&&0

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.setContentType("text/plain;charset=\""+charset+”\”");

partSet.add(part);

}

privateStringlistToMailString(List〈String〉mailAddressList){

StringBuildersbd=newStringBuilder();

if(null!

=mailAddressList){

intlistSize=mailAddressList.size();

for(inti=0;i〈listSize;i++){

if(0!

=i){

sbd。

append(";");

sbd.append("〈”).append(mailAddressList.get(i))。

append(">”);

returnsbd.toString();

privateList〈String>getrecipient(){

List〈String>list=newArrayList();

list。

addAll(to);

list。

addAll(cc);

list。

addAll(bcc);

returnlist;

}

/**

*添加一个附件单元

*

*@paramfilePath

*文件路径

*/

publicvoidaddAttachment(StringfilePath){

addAttachment(filePath,null);

publicvoidaddTo(StringmailAddress){

this。

to。

add(mailAddress);

}

publicvoidaddCc(StringmailAddress){

this。

cc。

add(mailAddress);

publicvoidaddBcc(StringmailAddress){

this。

bcc。

add(mailAddress);

/**

*添加一个附件单元

*@paramfilePath

*文件路径

*@paramcharset

*文件编码格式

*/

publicvoidaddAttachment(StringfilePath,Stringcharset){

if(null!

=filePath&&filePath。

length()〉0){

Filefile=newFile(filePath);

try{

addAttachment(file.getName(),newFileInputStream(file),

charset);

}catch(FileNotFoundExceptione){

System.out。

println("错误:

”+e。

getMessage());

System.exit

(1);

}

/**

*添加一个附件单元

*@paramfileName

*文件名

*@paramattachmentStream

*文件流

*@paramcharset

*文件编码格式

*/

publicvoidaddAttachment(StringfileName,InputStreamattachmentStream,

Stringcharset){

try{

byte[]bs=null;

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

if(null!

=bs){

MailPartattachmentPart=newMailPart();

charset=null!

=charset?

charset:

Charset。

defaultCharset()

.name();

StringcontentType=getPartContentType(fileName)

+”;name=\"=?

”+charset+”?

B?

”+toBase64(fileName)

+"?

=\"”;

attachmentPart.setCharset(charset);

attachmentPart.setContentType(contentType);

attachmentPart。

setContentDisposition("attachment;filename=\”=?

+charset+"?

B?

"+toBase64(fileName)+"?

=\"”);

attachmentPart.setContent(toBase64(bs));

partSet。

add(attachmentPart);

}catch(Exceptione){

e.printStackTrace();

}finally{

if(null!

=attachmentStream){

try{

attachmentStream.close();

attachmentStream=null;

}catch(IOExceptione){

e.printStackTrace();

}

}

Runtime。

getRuntime()。

gc();

Runtime。

getRuntime()。

runFinalization();

}

}

/**

*发送邮件

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

*/

publicStringsend(){

//对象申明

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

//PrintWriter,

//BufferedReader)需要关闭.

Socketsocket=null;

PrintWriterpw=null;

BufferedReaderbr=null;

try{

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。

toStr

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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