import javax.mail.* ;
import java.util.* ;
import javax.mail.internet.* ;
import java.net.* ;
import javax.activation.* ;
import com.westerasoft.changqingzj.common.commsql.* ;
public class SendMaiBean
{
/**
* 网际邮件扩充协议消息对象
*/
private MimeMessage message = null ;
/**
* 发送器
*/
private Transport transport = null ;
/**
*session对象
*/
private Session session = null ;
private Multipart mm = new MimeMultipart() ;
/**
* 设置mail服务器
*/
public SendMaiBean(String mailServer) throws Exception
{
try
{
Properties props = new Properties() ;
props.put("mail.smtp.host",mailServer) ;
props.put("mail.smtp.auth", "true") ;
session = Session.getInstance(props) ;
session.setDebug(true) ;
message = new MimeMessage(session) ;
this.transport = this.session.getTransport("smtp") ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "可能因为网络故障,连接邮件服务器失败!") ;
}
}
/**
* 设置发信人的用户名
* @throws Exception
*/
public void connectServer(String fromUserName, String fromUserPassword
, String serverIp) throws Exception
{
try
{
this.transport.connect(serverIp, fromUserName, fromUserPassword) ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "连接邮件服务器失败,请检查你的用户名和密码和网络!") ;
}
}
/**
* 发送mail
*/
public void sendMail() throws Exception
{
try
{
message.setContent(mm) ; //把mm作为消息对象的内容
message.setSentDate(new Date()) ;
message.saveChanges() ;
transport.sendMessage(message, message.getAllRecipients()) ;
transport.close() ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "可能是因为网络故障,发送邮件失败!") ;
}
}
/**
*
*/
public void setMailToAddresses(String[] tos) throws Exception
{
try
{
Address address[]=new Address[tos.length];
for (int i = 0 ; i < tos.length ; i++)
{
InternetAddress to = new InternetAddress(tos) ;
address=to;
}
message.setRecipients(Message.RecipientType.TO,address);
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "收信人地址错误!") ;
}
}
/**
* 设置发行人
*/
public void setMailFromAddress(String from) throws Exception
{
try
{
InternetAddress f = new InternetAddress(from) ;
message.setFrom(f) ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发信人地址错误!") ;
}
}
/**
* 设置主题
*/
public void setMailTitle(String title) throws Exception
{
try
{
message.setSubject(title,"gb2312") ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送信件主题错误!") ;
}
}
/**
*
*/
public void setMailContent(String tcontent, String emailtype) throws
Exception
{
try
{
//设置信件文本内容
BodyPart mdp = new MimeBodyPart() ; //新建一个存放信件内容的BodyPart对象
mdp.setContent(tcontent, emailtype + ";charset=gb2312") ; //给BodyPart对象设置内容和格式/编码方式
mm.addBodyPart(mdp) ; //将含有信件内容的BodyPart加入到MimeMultipart对象中
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送信件内容错误!") ;
}
}
/**
* 增加附件,注:是手输入的文本信息
*/
public void addTextTypeFile(String content) throws Exception
{
try
{
// 设置信件的附件1(自定义附件:直接将所设文本内容加到自定义文件中作为附件发送)
MimeBodyPart mdp = new MimeBodyPart() ; //新建一个存放附件的BodyPart
DataHandler dh = new DataHandler(content, "text/plain;charset=gb2312") ;
//新建一个DataHandler对象,并设置其内容和格式/编码方式
mdp.setFileName("text.txt") ; //加上这句将作为附件发送,否则将作为信件的文本内容
mdp.setDataHandler(dh) ; //给BodyPart对象设置内容为dh
mm.addBodyPart(mdp) ; //将含有附件的BodyPart加入到MimeMultipart对象中
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送文本附件出错!") ;
}
}
/**
* 增加附件,注:是本地文件
*/
public void addFileTypeFile(String fileName) throws Exception
{
try
{
//设置信件的附件2(用本地上的文件作为附件)
MimeBodyPart mdp = new MimeBodyPart() ;
FileDataSource fds = new FileDataSource(fileName) ;
DataHandler dh = new DataHandler(fds) ;
int ddd = fileName.lastIndexOf("\\") ;
String fname = fileName.substring(ddd) ; //提取文件名
String ffname = new String(fname.getBytes("gb2312"), "ISO8859-1") ; //处理文件名是中文的情况
mdp.setFileName(ffname) ; //可以和原文件名不一致,但最好一样
mdp.setDataHandler(dh) ;
mm.addBodyPart(mdp) ;
}
catch (Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送文件附件出错!") ;
}
}
/**
* 增加附件,注:是网络中的文件
*/
public void addNetTypeFile(String netAddressAndFileName) throws Exception
{
try
{
//设置信件的附件3(用远程文件作为附件)
MimeBodyPart mdp = new MimeBodyPart() ;
URL urlfj = new URL(netAddressAndFileName) ;
URLDataSource ur = new URLDataSource(urlfj) ;
//注:这里用的参数只能为URL对象,不能为URL字串,在前面类介绍时有误(请谅解),这里纠正一下.
DataHandler dh = new DataHandler(ur) ;
int ttt = netAddressAndFileName.lastIndexOf("/") ;
String urlname = netAddressAndFileName.substring(ttt) ;
mdp.setFileName(urlname) ;
mdp.setDataHandler(dh) ;
mm.addBodyPart(mdp) ;
}
catch(Exception e)
{
e.printStackTrace() ;
throw new Exception(ExceptionHandle.ERROR_PREFIX + "发送网络附件出错出错!") ;
}
}
}
来自IT资源网IT资源网