首页 > 开发 > Java > 正文

用Java发送图文并茂的HTML邮件

2020-04-09 21:38:00
字体:
来源:转载
供稿:网友

推荐:用在JavaScript的RequestHelper
碰到一个小小的需求,就是要根据传入的锚(也就是url中#后面的东西啦)来显示不同的内容,记得以前写了的,不知道被我丢到哪去了,又要重新写一个,顺便把功能整理加强了一些,加入了取QueryString

  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, (byte) 0);
  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. }

分享:ASP.NET2.0中控件的简单异步回调
虽然已经有了ASP.NET AJAX了,最近学习ASP.NET控件的时候,逐步理解了原始的控件异步回调(代码取自《ASP.NET 2.0 高级编程》): 首先,在Render事件中添加好一个事件

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表