利用Sun公司提供的JavaMail API可以很方便的开发邮件发送程序。也许你已经可以利用它来发送一段简单的文本了,但想不想使你的程序像OUTLOOK一样也能发送附件呢?本文在简单介绍了JavaMail之后,详细讲解了一段完整的送信的JavaBean及一个十分轻巧的servlet。 <BR><BR>(没有装载JavaMail API的读者,可以到<a href="www.javasoft.com" target=_blank>此站点</a>下载,并按照Readme.txt设置好ClassPath) <BR> <strong>一、JavaMail中一些我们需要的类</strong> <BR> 1.Properties <BR><BR>JavaMail需要Properties来创建一个session对象,其属性值就是发送邮件的主机,如: <BR><BR><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor="e6e6e6" class="code">Properties props = new Properties ();<br>props.put("mail.smtp.host", "smtp.xxxx.com");//可以换上你的smtp主机名,就像你在OutLook中设置smtp主机名一样。</td></tr></table> <BR> 2.Session <BR><BR>所有的基于JavaMail的程序都至少需要一个或全部的对话目标。 <BR><BR><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor="e6e6e6" class="code">Session session = Session.getInstance(props, null);</td></tr></table> <BR> 3.MimeMessage <BR><BR>信息对象将把你所发送的邮件真实的反映出来。 <BR><BR><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor="e6e6e6" class="code">MimeMessage msg = new MimeMessage(session);</td></tr></table> <BR> 4.Transport <BR><BR>邮件的发送是由Transport来完成的: <BR><BR><table width="580" border="1" cellspacing="0" cellpadding="0" bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor="e6e6e6" class="code">Transport.send(msg);</td></tr></table> <BR> <strong>二、我们自己创建的可发送附件的类</strong> <BR> <table width=580 border=1 cellspacing=0 cellpadding=0 bordercolorlight = "black" bordercolordark = "#FFFFFF"><tr><td bgcolor=e6e6e6 class=code>import java.util.* ;<br>import java.io.* ;<br>import javax.mail.* ;<br>import javax.mail.internet.* ;<br>import javax.activation.* ;<br>public class Mail {<br>//定义发件人、收件人、主题等<br>String to="";<br>String from="";<br>String host="";<br>String filename="";<br>String subject="";<br>//用于保存发送附件的文件名的集合<br>Vector file = new Vector();<br>//做一个可以传发件人等参数的构造<br>public Mail (String to,String from,String smtpServer,String subject){<br>//初始化发件人、收件人、主题等<br>this.to=to;<br>this.from=from;<br>this.host=smtpServer;<br>this.subject=subject;<br>}<br>//该方法用于收集附件名<br>public void attachfile(String fname){<br>file.addElement(fname);<br>}<br>//开始发送信件的方法<br>public boolean startSend(){<br>//创建Properties对象<br>Properties props = System.getProperties();<br>//创建信件服务器<br>props.put("mail.smtp.host", host);<br>//得到默认的对话对象<br>Session session=Session.getDefaultInstance(props, null); try {<br>//创建一个消息,并初始化该消息的各项元素<br>MimeMessage msg = new MimeMessage(session);<br>msg.setFrom(new InternetAddress(from));<br>InternetAddress[] address={new InternetAddress(to)};<br>msg.setRecipients(Message.RecipientType.TO,address);<br>msg.setSubject(subject);<br>//后面的BodyPart将加入到此处创建的Multipart中<br>Multipart mp = new MimeMultipart();<br>//利用枚举器方便的遍历集合<br>Enumeration efile=file.elements();<br>//检查序列中是否还有更多的对象<br>while(efile.hasMoreElements()){<br>MimeBodyPart mbp=new MimeBodyPart();<br>//选择出每一个附件名<br>filename=efile .nextElement().toString();<br>//得到数据源<br>FileDataSource fds=new FileDataSource(filename);<br>//得到附件本身并至入BodyPart<br>mbp.setDataHandler(new DataHandler(fds));<br>//得到文件名同样至入BodyPart<br>mbp.setFileName(fds.getName());<br>mp.addBodyPart(mbp);<br>}<br>//移走集合中的所有元素<br>file.removeAllElements();<br>//Multipart加入到信件<br>msg.setContent(mp);<br>//设置信件头的发送日期<br>msg.setSentDate(new Date());<br>//发送信件<br>Transport.send(msg);<br>} catch (MessagingException mex) {<br>mex.printStackTrace();<br>Exception ex = null;<br>if ((ex=mex.getNextException())!=null){<br>ex.printStackTrace();<br>}<br>return false;<br>}<br>return true;<br>}<br>}</td></tr></table>
(编辑:aniston)
|