当前位置:主页   - 电脑 - 网站开发 - ASP.Net
用Java发送图文并茂的HTML邮件
来源:CSDN   作者:孙钰佳   更新时间:2009-03-09
收藏此页】    【字号    】    【打印】    【关闭
  1. package com.syj;   
  2.   
  3. import java.io.ByteArrayOutputStream;   
  4. import java.io.FileInputStream;   
  5. import java.io.IOException;   
  6. import java.util.Arrays;   
  7. import java.util.Date;   
  8. import java.util.Properties;   
  9.   
  10. import javax.activation.DataHandler;   
  11. import javax.activation.FileDataSource;   
  12. import javax.mail.Authenticator;   
  13. import javax.mail.Message;   
  14. import javax.mail.PasswordAuthentication;   
  15. import javax.mail.Session;   
  16. import javax.mail.Transport;   
  17. import javax.mail.internet.InternetAddress;   
  18. import javax.mail.internet.MimeMessage;   
  19.   
  20. import javax.mail.BodyPart;   
  21. import javax.mail.Multipart;   
  22. import javax.mail.internet.MimeBodyPart;   
  23. import javax.mail.internet.MimeMultipart;   
  24.   
  25. import com.sun.istack.internal.ByteArrayDataSource;   
  26.   
  27. /**  
  28.  * <P>  
  29.  * Title:用java发送邮件的例子  
  30.  * </P>  
  31.  *   
  32.  * <P>  
  33.  * Description:发送图片附件并在html中使用该图片  
  34.  * </P>  
  35.  *   
  36.  * <P>  
  37.  * Copyright: Copyright (c) 2007  
  38.  * </P>  
  39.  *   
  40.  * @author 孙钰佳  
  41.  * @main sunyujia@yahoo.cn  
  42.  * @date Jun 10, 2008 12:35:26 AM  
  43.  */  
  44. public class SendMail {   
  45.     private static String username = "xxxx";   
  46.     private static String password = "xxxx";   
  47.     private static String smtpServer = "smtp.163.com";   
  48.     private static String fromMailAddress = "xxxx@163.com";   
  49.     private static String toMailAddress = "sunyujia@yahoo.cn";   
  50.   
  51.     public static void main(String[] args) throws Exception {   
  52.         Properties props = new Properties();   
  53.         props.put("mail.smtp.auth""true");   
  54.         props.put("mail.smtp.host", smtpServer);   
  55.         // 获得邮件会话对象   
  56.         Session session = Session.getDefaultInstance(props,   
  57.                 new SmtpAuthenticator(username, password));   
  58.         /** *************************************************** */  
  59.         // 创建MIME邮件对象   
  60.         MimeMessage mimeMessage = new MimeMessage(session);   
  61.         mimeMessage.setFrom(new InternetAddress(fromMailAddress));// 发件人   
  62.         mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(   
  63.                 toMailAddress));// 收件人   
  64.         mimeMessage.setSubject("主题");   
  65.         mimeMessage.setSentDate(new Date());// 发送日期   
  66.         Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件   
  67.         /** *************************************************** */  
  68.         BodyPart bodyPart = new MimeBodyPart();// 正文   
  69.         bodyPart.setDataHandler(new DataHandler("测<img src="cid:IMG1" />试",   
  70.                 "text/html;charset=GBK"));// 网页格式   
  71.         /** *************************************************** */  
  72.         BodyPart attachBodyPart = new MimeBodyPart();// 普通附件   
  73.         FileDataSource fds = new FileDataSource("c:/boot.ini");   
  74.         attachBodyPart.setDataHandler(new DataHandler(fds));   
  75.         attachBodyPart.setFileName("=?GBK?B?"  
  76.                 + new sun.misc.BASE64Encoder().encode(fds.getName().getBytes())   
  77.                 + "?=");// 解决附件名中文乱码   
  78.         mp.addBodyPart(attachBodyPart);   
  79.         /** *************************************************** */  
  80.         MimeBodyPart imgBodyPart = new MimeBodyPart(); // 附件图标   
  81.         byte[] bytes = readFile("C:/button.gif");   
  82.         ByteArrayDataSource fileds = new ByteArrayDataSource(bytes,   
  83.                 "application/octet-stream");   
  84.         imgBodyPart.setDataHandler(new DataHandler(fileds));   
  85.         imgBodyPart.setFileName("button.gif");   
  86.         imgBodyPart.setHeader("Content-ID""<IMG1></IMG1>");// 在html中使用该图片方法src="cid:IMG1"   
  87.         mp.addBodyPart(imgBodyPart);   
  88.         /** *************************************************** */  
  89.         mp.addBodyPart(bodyPart);   
  90.         mimeMessage.setContent(mp);// 设置邮件内容对象   
  91.         Transport.send(mimeMessage);// 发送邮件   
  92.   
  93.     }   
  94.   
  95.     /**  
  96.      * 读取文件  
  97.      *   
  98.      * @param file  
  99.      *            文件路径  
  100.      * @return 返回二进制数组  
  101.      */  
  102.     public static byte[] readFile(String file) {   
  103.         FileInputStream fis = null;   
  104.         ByteArrayOutputStream bos = null;   
  105.         try {   
  106.             fis = new FileInputStream(file);   
  107.             bos = new ByteArrayOutputStream();   
  108.             int bytesRead;   
  109.             byte buffer[] = new byte[1024 * 1024];   
  110.             while ((bytesRead = fis.read(buffer)) != -1) {   
  111.                 bos.write(buffer, 0, bytesRead);   
  112.                 Arrays.fill(buffer, (byte0);   
  113.             }   
  114.         } catch (IOException e1) {   
  115.             e1.printStackTrace();   
  116.         } finally {   
  117.             try {   
  118.                 if (bos != null)   
  119.                     bos.close();   
  120.             } catch (IOException e) {   
  121.                 e.printStackTrace();   
  122.             }   
  123.         }   
  124.         return bos.toByteArray();   
  125.     }   
  126. }   
  127.   
  128. /**  
  129.  * Smtp认证  
  130.  */  
  131. class SmtpAuthenticator extends Authenticator {   
  132.     String username = null;   
  133.     String password = null;   
  134.   
  135.     // SMTP身份验证   
  136.     public SmtpAuthenticator(String username, String password) {   
  137.         this.username = username;   
  138.         this.password = password;   
  139.     }   
  140.   
  141.     public PasswordAuthentication getPasswordAuthentication() {   
  142.         return new PasswordAuthentication(this.username, this.password);   
  143.     }   
  144.   
  145. }  

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明