JavaMail(3)------SendAttachMail

来源:互联网 发布:照片文件恢复软件 编辑:程序博客网 时间:2024/06/05 14:56
  1. package test;
  2. import javax.mail.*;
  3. import javax.mail.internet.*;
  4. import javax.activation.*;
  5. import java.util.*;
  6. public class SendAttachMail {
  7.     String SMTPHost=""//SMTP服务器
  8.     String user=""//登录SMTP服务器的帐号
  9.     String password=""//登录SMTP服务器的密码
  10.      
  11.     String from =""//发件人邮箱
  12.     String to =""//收件人邮箱
  13.     String subject =""//邮件标题
  14.     String content =""//邮件内容
  15.     String filename =""//附件文件名
  16.      
  17.     //无参数构造方法    
  18.     public SendAttachMail() {}
  19.     
  20.     public String getContent() {
  21.         return content;
  22.     }
  23.     public void setContent(String content) {
  24.         try{            
  25.             //解决内容的中文问题
  26.             content = new String(content.getBytes("ISO8859-1"),"gb2312");
  27.         }catch(Exception ex){
  28.             ex.printStackTrace();
  29.         }
  30.         this.content = content;
  31.     }
  32.     public String getFilename() {
  33.         return filename;
  34.     }
  35.     public void setFilename(String filename) {
  36.         try{            
  37.             //解决文件名的中文问题
  38.             filename = new String(filename.getBytes("ISO8859-1"),"gb2312");
  39.         }catch(Exception ex){
  40.             ex.printStackTrace();
  41.         }
  42.         //将文件路径中的'/'替换成'/'
  43.         filename = filename.replaceAll("////","/");
  44.         this.filename = filename;
  45.     }
  46.     public String getFrom() {
  47.         return from;
  48.     }
  49.     public void setFrom(String from) {
  50.         this.from = from;
  51.     }
  52.     public String getPassword() {
  53.         return password;
  54.     }
  55.     public void setPassword(String password) {
  56.         this.password = password;
  57.     }
  58.     public String getSMTPHost() {
  59.         return SMTPHost;
  60.     }
  61.     public void setSMTPHost(String host) {
  62.         SMTPHost = host;
  63.     }
  64.     public String getSubject() {
  65.         return subject;
  66.     }
  67.     public void setSubject(String subject) {
  68.         try{            
  69.             //解决标题的中文问题
  70.             subject = new String(subject.getBytes("ISO8859-1"),"gb2312");
  71.         }catch(Exception ex){
  72.             ex.printStackTrace();
  73.         }       
  74.         this.subject = subject;
  75.     }
  76.     public String getTo() {
  77.         return to;
  78.     }
  79.     public void setTo(String to) {
  80.         this.to = to;
  81.     }
  82.     public String getUser() {
  83.         return user;
  84.     }
  85.     public void setUser(String user) {
  86.         this.user = user;
  87.     }   
  88.     //发送邮件
  89.     public boolean send(){
  90.         //创建一个属性对象
  91.         Properties props = new Properties();
  92.         //指定SMTP服务器
  93.         props.put("mail.smtp.host", SMTPHost);
  94.         //指定是否需要SMTP验证      
  95.         props.put("mail.smtp.auth""true");
  96.         try{
  97.             //创建一个授权验证对象
  98.             SmtpAuth auth = new SmtpAuth();
  99.             auth.setAccount(user,password);
  100.             
  101.             //创建一个Session对象
  102.             Session mailSession = Session.getDefaultInstance(props,auth);
  103.             mailSession.setDebug(true);
  104.             
  105.             //创建一个MimeMessage 对象
  106.             MimeMessage message=new MimeMessage(mailSession);
  107.             //指定发件人邮箱
  108.             message.setFrom(new InternetAddress(from));
  109.             //指定收件人邮箱
  110.             message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
  111.             //指定邮件主题
  112.             message.setSubject(subject);
  113.             //指定邮件发送日期
  114.             message.setSentDate(new Date());
  115.             //指定邮件优先级 1:紧急 3:普通 5:缓慢
  116.             message.setHeader("X-Priority","1");
  117.             message.saveChanges();
  118.             
  119.             //新建一个MimeMultipart对象用来存放多个BodyPart对象
  120.             Multipart container=new MimeMultipart();
  121.             //新建一个存放信件内容的BodyPart对象
  122.             BodyPart textBodyPart=new MimeBodyPart();
  123.             //给BodyPart对象设置内容和格式/编码方式
  124.             textBodyPart.setContent(content,"text/html;charset=gb2312");
  125.             //将含有信件内容的BodyPart加入到MimeMultipart对象中
  126.             container.addBodyPart(textBodyPart);
  127.             
  128.             //新建一个存放信件附件的BodyPart对象
  129.             BodyPart fileBodyPart=new MimeBodyPart();
  130.             //将本地文件作为附件
  131.             FileDataSource fds=new FileDataSource(filename);
  132.             fileBodyPart.setDataHandler(new DataHandler(fds));
  133.             //处理邮件中附件文件名的中文问题
  134.             String attachName = fds.getName();
  135.             attachName = new String(attachName.getBytes("gb2312"),"ISO8859-1");
  136.             //设定附件文件名
  137.             fileBodyPart.setFileName(attachName);
  138.             //将附件的BodyPart对象加入到container中
  139.             container.addBodyPart(fileBodyPart);
  140.             
  141.             //将container作为消息对象的内容
  142.             message.setContent(container);
  143.             
  144.             //创建一个Transport对象
  145.             Transport transport = mailSession.getTransport("smtp");
  146.             //连接SMTP服务器
  147.             transport.connect(SMTPHost, user, password);
  148.             //发送邮件
  149.             transport.send(message, message.getAllRecipients());
  150.             transport.close();
  151.             return true;
  152.         }catch(Exception ex){
  153.             ex.printStackTrace();
  154.             return false;
  155.         }
  156.     }
  157.     
  158.     //定义一个SMTP授权验证类
  159.     static class SmtpAuth extends Authenticator{
  160.         String user,password;
  161.         //设置帐号信息
  162.         void setAccount(String user,String password){
  163.             this.user = user;
  164.             this.password = password;
  165.         }
  166.         //取得PasswordAuthentication对象
  167.         protected PasswordAuthentication getPasswordAuthentication(){
  168.             return new PasswordAuthentication(user,password);
  169.         }
  170.     }
  171. }

普通页面,,,

  1. <html>
  2.   <head>
  3.     <title>发送带附件HTML型邮件</title>
  4.     <meta http-equiv="content-type" content="text/html; charset=gb2312">
  5.   </head>
  6.   
  7.   <body>
  8.     <h2>发送带附件HTML型邮件</h2>
  9.     <hr>
  10.     <form name="form1" method="post" action="sendMail3.jsp">
  11.         SMTP服务器:<input type="text" id="SMTPHost" name="SMTPHost"><br>
  12.         登录帐号:<input type="text" id="user" name="user"><br>
  13.         登录密码:<input type="password" id="password" name="password"><br>
  14.         <br>
  15.         发件人邮箱:<input type="text" id="from" name="from"><br>
  16.         收件人邮箱:<input type="text" id="to" name="to"><br>
  17.         邮件标题:<input type="text" id="subject" name="subject"><br>
  18.         邮件内容HTML代码:<textarea id="content" name="content" rows="5" cols="40"></textarea><br>
  19.         附件:<input type="file" id="filename" name="filename"><br>
  20.         <br>
  21.         <input type="submit" name="submit" value="发送"> 
  22.         <input type="reset" name="reset" value="重填">        
  23.     </form>    
  24.   </body>
  25. </html>
  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
  2. <%@ page import="test.SendAttachMail"%>
  3. <jsp:useBean id="mySend" class="test.SendAttachMail"></jsp:useBean>
  4. <jsp:setProperty name="mySend" property="*"/>
  5. <%
  6.     //注意这里我们通过JavaBean的自省机制完成了对其属性的赋值
  7.         
  8.     boolean status = mySend.send();
  9.     if (status){
  10.         out.println("恭喜您,邮件发送成功!");
  11.     }else{
  12.         out.println("对不起,邮件发送失败!");
  13.     }
  14. %>