概述

  Spring Boot下面整合了邮件服务器,使用Spring Boot能够轻松实现邮件发送;整理下最近使用Spring Boot发送邮件和注意事项;

Maven包依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>

Spring Boot的配置

  1. spring.mail.host=smtp.servie.com
  2. spring.mail.username=用户名 //发送方的邮箱
  3. spring.mail.password=密码 //对于qq邮箱而言 密码指的就是发送方的授权码
  1. spring.mail.port=465
  2.  
  3. spring.mail.protocol=smtp
  1. spring.mail.properties.mail.smtp.auth=true
  1. spring.mail.properties.mail.smtp.ssl.enable=true
  1. #是否用启用加密传送的协议验证项
  1. #注意:在spring.mail.password处的值是需要在邮箱设置里面生成的授权码,这个不是真实的密码。

Spring 代码实现

  1. package com.dbgo.webservicedemo.email;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.core.io.FileSystemResource;
  5. import org.springframework.mail.javamail.JavaMailSender;
  6. import org.springframework.mail.javamail.MimeMessageHelper;
  7. import org.springframework.stereotype.Component;
  8.  
  9. import javax.mail.MessagingException;
  10. import javax.mail.internet.MimeMessage;
  11. import java.io.File;
  12.  
  13. @Component("emailtool")
  14. public class EmailTool {
  15. @Autowired
  16. private JavaMailSender javaMailSender;
  17.  
  18. public void sendSimpleMail(){
  19. MimeMessage message = null;
  20. try {
  21. message = javaMailSender.createMimeMessage();
  22. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  23. helper.setFrom("jiajinhao@dbgo.cn");
  24. helper.setTo("653484166@qq.com");
  25. helper.setSubject("标题:发送Html内容");
  26.  
  27. StringBuffer sb = new StringBuffer();
  28. sb.append("<h1>大标题-h1</h1>")
  29. .append("<p style='color:#F00'>红色字</p>")
  30. .append("<p style='text-align:right'>右对齐</p>");
  31. helper.setText(sb.toString(), true);
  32. FileSystemResource fileSystemResource=new FileSystemResource(new File("D:\76678.pdf"))
  33. helper.addAttachment("电子发票"fileSystemResource);
  34. javaMailSender.send(message);
  35. } catch (MessagingException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39.  
  40. }

非Spring Boot下发送电子邮件:

Maven包依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.sun.mail</groupId>
  4. <artifactId>javax.mail</artifactId>
  5. <version>1.5.2</version>
  6. </dependency>
  7. </dependencies>

DEMO1代码事例

  1. package com.justin.framework.core.utils.email;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.UnsupportedEncodingException;
  10. import java.util.Date;
  11. import java.util.Properties;
  12.  
  13. import javax.activation.DataHandler;
  14. import javax.activation.DataSource;
  15. import javax.activation.FileDataSource;
  16. import javax.mail.Address;
  17. import javax.mail.Authenticator;
  18. import javax.mail.Message;
  19. import javax.mail.Message.RecipientType;
  20. import javax.mail.MessagingException;
  21. import javax.mail.PasswordAuthentication;
  22. import javax.mail.Session;
  23. import javax.mail.Transport;
  24. import javax.mail.internet.InternetAddress;
  25. import javax.mail.internet.MimeBodyPart;
  26. import javax.mail.internet.MimeMessage;
  27. import javax.mail.internet.MimeMultipart;
  28. import javax.mail.internet.MimeUtility;
  29.  
  30. /**
  31. * 使用SMTP协议发送电子邮件
  32. */
  33. public class sendEmailCode {
  34.  
  35. // 邮件发送协议
  36. private final static String PROTOCOL = "smtp";
  37.  
  38. // SMTP邮件服务器
  39. private final static String HOST = "mail.tdb.com";
  40.  
  41. // SMTP邮件服务器默认端口
  42. private final static String PORT = "25";
  43.  
  44. // 是否要求身份认证
  45. private final static String IS_AUTH = "true";
  46.  
  47. // 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
  48. private final static String IS_ENABLED_DEBUG_MOD = "true";
  49.  
  50. // 发件人
  51. private static String from = "tdbjrcrm@tdb.com";
  52.  
  53. // 收件人
  54. private static String to = "db_yangruirui@tdbcwgs.com";
  55.  
  56. private static String senduserName="tdbjrcrm@tdb.com";
  57. private static String senduserPwd="New*2016";
  58.  
  59. // 初始化连接邮件服务器的会话信息
  60. private static Properties props = null;
  61.  
  62. static {
  63. props = new Properties();
  64. props.setProperty("mail.enable", "true");
  65. props.setProperty("mail.transport.protocol", PROTOCOL);
  66. props.setProperty("mail.smtp.host", HOST);
  67. props.setProperty("mail.smtp.port", PORT);
  68. props.setProperty("mail.smtp.auth", IS_AUTH);//视情况而定
  69. props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
  70. }
  71.  
  72. /**
  73. * 发送简单的文本邮件
  74. */
  75. public static boolean sendTextEmail(String to,int code) throws Exception {
  76. try {
  77. // 创建Session实例对象
  78. Session session1 = Session.getDefaultInstance(props);
  79.  
  80. // 创建MimeMessage实例对象
  81. MimeMessage message = new MimeMessage(session1);
  82. // 设置发件人
  83. message.setFrom(new InternetAddress(from));
  84. // 设置邮件主题
  85. message.setSubject("内燃机注册验证码");
  86. // 设置收件人
  87. message.setRecipient(RecipientType.TO, new InternetAddress(to));
  88. // 设置发送时间
  89. message.setSentDate(new Date());
  90. // 设置纯文本内容为邮件正文
  91. message.setText("您的验证码是:"+code+"!验证码有效期是10分钟,过期后请重新获取!"
  92. + "中国内燃机学会");
  93. // 保存并生成最终的邮件内容
  94. message.saveChanges();
  95.  
  96. // 获得Transport实例对象
  97. Transport transport = session1.getTransport();
  98. // 打开连接
  99. transport.connect("meijiajiang2016", "");
  100. // 将message对象传递给transport对象,将邮件发送出去
  101. transport.sendMessage(message, message.getAllRecipients());
  102. // 关闭连接
  103. transport.close();
  104.  
  105. return true;
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. return false;
  109. }
  110. }
  111.  
  112. public static void main(String[] args) throws Exception {
  113. sendHtmlEmail("db_yangruirui@tdbcwgs.com", 88888);
  114. }
  115.  
  116. /**
  117. * 发送简单的html邮件
  118. */
  119. public static boolean sendHtmlEmail(String to,int code) throws Exception {
  120. // 创建Session实例对象
  121. Session session1 = Session.getInstance(props, new MyAuthenticator());
  122.  
  123. // 创建MimeMessage实例对象
  124. MimeMessage message = new MimeMessage(session1);
  125. // 设置邮件主题
  126. message.setSubject("内燃机注册");
  127. // 设置发送人
  128. message.setFrom(new InternetAddress(from));
  129. // 设置发送时间
  130. message.setSentDate(new Date());
  131. // 设置收件人
  132. message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
  133. // 设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为gbk
  134. message.setContent("<div style='width: 600px;margin: 0 auto'><h3 style='color:#003E64; text-align:center; '>内燃机注册验证码</h3><p style=''>尊敬的用户您好:</p><p style='text-indent: 2em'>您在注册内燃机账号,此次的验证码是:"+code+",有效期10分钟!如果过期请重新获取。</p><p style='text-align: right; color:#003E64; font-size: 20px;'>中国内燃机学会</p></div>","text/html;charset=utf-8");
  135.  
  136. //设置自定义发件人昵称
  137. String nick="";
  138. try {
  139. nick=javax.mail.internet.MimeUtility.encodeText("中国内燃机学会");
  140. } catch (UnsupportedEncodingException e) {
  141. e.printStackTrace();
  142. }
  143. message.setFrom(new InternetAddress(nick+" <"+from+">"));
  144. // 保存并生成最终的邮件内容
  145. message.saveChanges();
  146.  
  147. // 发送邮件
  148. try {
  149. Transport.send(message);
  150. return true;
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. return false;
  154. }
  155.  
  156. }
  157.  
  158. /**
  159. * 发送带内嵌图片的HTML邮件
  160. */
  161. public static void sendHtmlWithInnerImageEmail() throws MessagingException {
  162. // 创建Session实例对象
  163. Session session = Session.getDefaultInstance(props, new MyAuthenticator());
  164.  
  165. // 创建邮件内容
  166. MimeMessage message = new MimeMessage(session);
  167. // 邮件主题,并指定编码格式
  168. message.setSubject("带内嵌图片的HTML邮件", "utf-8");
  169. // 发件人
  170. message.setFrom(new InternetAddress(from));
  171. // 收件人
  172. message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
  173. // 抄送
  174. message.setRecipient(RecipientType.CC, new InternetAddress("java_test@sohu.com"));
  175. // 密送 (不会在邮件收件人名单中显示出来)
  176. message.setRecipient(RecipientType.BCC, new InternetAddress("417067629@qq.com"));
  177. // 发送时间
  178. message.setSentDate(new Date());
  179.  
  180. // 创建一个MIME子类型为“related”的MimeMultipart对象
  181. MimeMultipart mp = new MimeMultipart("related");
  182. // 创建一个表示正文的MimeBodyPart对象,并将它加入到前面创建的MimeMultipart对象中
  183. MimeBodyPart htmlPart = new MimeBodyPart();
  184. mp.addBodyPart(htmlPart);
  185. // 创建一个表示图片资源的MimeBodyPart对象,将将它加入到前面创建的MimeMultipart对象中
  186. MimeBodyPart imagePart = new MimeBodyPart();
  187. mp.addBodyPart(imagePart);
  188.  
  189. // 将MimeMultipart对象设置为整个邮件的内容
  190. message.setContent(mp);
  191.  
  192. // 设置内嵌图片邮件体
  193. DataSource ds = new FileDataSource(new File("resource/firefoxlogo.png"));
  194. DataHandler dh = new DataHandler(ds);
  195. imagePart.setDataHandler(dh);
  196. imagePart.setContentID("firefoxlogo.png"); // 设置内容编号,用于其它邮件体引用
  197.  
  198. // 创建一个MIME子类型为"alternative"的MimeMultipart对象,并作为前面创建的htmlPart对象的邮件内容
  199. MimeMultipart htmlMultipart = new MimeMultipart("alternative");
  200. // 创建一个表示html正文的MimeBodyPart对象
  201. MimeBodyPart htmlBodypart = new MimeBodyPart();
  202. // 其中cid=androidlogo.gif是引用邮件内部的图片,即imagePart.setContentID("androidlogo.gif");方法所保存的图片
  203. htmlBodypart.setContent("<span style='color:red;'>这是带内嵌图片的HTML邮件哦!!!<img src=\"cid:firefoxlogo.png\" /></span>","text/html;charset=utf-8");
  204. htmlMultipart.addBodyPart(htmlBodypart);
  205. htmlPart.setContent(htmlMultipart);
  206.  
  207. // 保存并生成最终的邮件内容
  208. message.saveChanges();
  209.  
  210. // 发送邮件
  211. Transport.send(message);
  212. }
  213.  
  214. /**
  215. * 发送带内嵌图片、附件、多收件人(显示邮箱姓名)、邮件优先级、阅读回执的完整的HTML邮件
  216. */
  217. public static void sendMultipleEmail() throws Exception {
  218. String charset = "utf-8"; // 指定中文编码格式
  219. // 创建Session实例对象
  220. Session session = Session.getInstance(props,new MyAuthenticator());
  221.  
  222. // 创建MimeMessage实例对象
  223. MimeMessage message = new MimeMessage(session);
  224. // 设置主题
  225. message.setSubject("使用JavaMail发送混合组合类型的邮件测试");
  226. // 设置发送人
  227. message.setFrom(new InternetAddress(from,"新浪测试邮箱",charset));
  228. // 设置收件人
  229. message.setRecipients(RecipientType.TO,
  230. new Address[] {
  231. // 参数1:邮箱地址,参数2:姓名(在客户端收件只显示姓名,而不显示邮件地址),参数3:姓名中文字符串编码
  232. new InternetAddress("java_test@sohu.com", "张三_sohu", charset),
  233. new InternetAddress("xyang0917@163.com", "李四_163", charset),
  234. }
  235. );
  236. // 设置抄送
  237. message.setRecipient(RecipientType.CC, new InternetAddress("xyang0917@gmail.com","王五_gmail",charset));
  238. // 设置密送
  239. message.setRecipient(RecipientType.BCC, new InternetAddress("xyang0917@qq.com", "赵六_QQ", charset));
  240. // 设置发送时间
  241. message.setSentDate(new Date());
  242. // 设置回复人(收件人回复此邮件时,默认收件人)
  243. message.setReplyTo(InternetAddress.parse("\"" + MimeUtility.encodeText("田七") + "\" <417067629@qq.com>"));
  244. // 设置优先级(1:紧急 3:普通 5:低)
  245. message.setHeader("X-Priority", "1");
  246. // 要求阅读回执(收件人阅读邮件时会提示回复发件人,表明邮件已收到,并已阅读)
  247. message.setHeader("Disposition-Notification-To", from);
  248.  
  249. // 创建一个MIME子类型为"mixed"的MimeMultipart对象,表示这是一封混合组合类型的邮件
  250. MimeMultipart mailContent = new MimeMultipart("mixed");
  251. message.setContent(mailContent);
  252.  
  253. // 附件
  254. MimeBodyPart attach1 = new MimeBodyPart();
  255. MimeBodyPart attach2 = new MimeBodyPart();
  256. // 内容
  257. MimeBodyPart mailBody = new MimeBodyPart();
  258.  
  259. // 将附件和内容添加到邮件当中
  260. mailContent.addBodyPart(attach1);
  261. mailContent.addBodyPart(attach2);
  262. mailContent.addBodyPart(mailBody);
  263.  
  264. // 附件1(利用jaf框架读取数据源生成邮件体)
  265. DataSource ds1 = new FileDataSource("resource/Earth.bmp");
  266. DataHandler dh1 = new DataHandler(ds1);
  267. attach1.setFileName(MimeUtility.encodeText("Earth.bmp"));
  268. attach1.setDataHandler(dh1);
  269.  
  270. // 附件2
  271. DataSource ds2 = new FileDataSource("resource/如何学好C语言.txt");
  272. DataHandler dh2 = new DataHandler(ds2);
  273. attach2.setDataHandler(dh2);
  274. attach2.setFileName(MimeUtility.encodeText("如何学好C语言.txt"));
  275.  
  276. // 邮件正文(内嵌图片+html文本)
  277. MimeMultipart body = new MimeMultipart("related"); //邮件正文也是一个组合体,需要指明组合关系
  278. mailBody.setContent(body);
  279.  
  280. // 邮件正文由html和图片构成
  281. MimeBodyPart imgPart = new MimeBodyPart();
  282. MimeBodyPart htmlPart = new MimeBodyPart();
  283. body.addBodyPart(imgPart);
  284. body.addBodyPart(htmlPart);
  285.  
  286. // 正文图片
  287. DataSource ds3 = new FileDataSource("resource/firefoxlogo.png");
  288. DataHandler dh3 = new DataHandler(ds3);
  289. imgPart.setDataHandler(dh3);
  290. imgPart.setContentID("firefoxlogo.png");
  291.  
  292. // html邮件内容
  293. MimeMultipart htmlMultipart = new MimeMultipart("alternative");
  294. htmlPart.setContent(htmlMultipart);
  295. MimeBodyPart htmlContent = new MimeBodyPart();
  296. htmlContent.setContent(
  297. "<span style='color:red'>这是我自己用java mail发送的邮件哦!" +
  298. "<img src='cid:firefoxlogo.png' /></span>"
  299. , "text/html;charset=gbk");
  300. htmlMultipart.addBodyPart(htmlContent);
  301.  
  302. // 保存邮件内容修改
  303. message.saveChanges();
  304.  
  305. /*File eml = buildEmlFile(message);
  306. sendMailForEml(eml);*/
  307.  
  308. // 发送邮件
  309. Transport.send(message);
  310. }
  311.  
  312. /**
  313. * 将邮件内容生成eml文件
  314. * @param message 邮件内容
  315. */
  316. public static File buildEmlFile(Message message) throws MessagingException, FileNotFoundException, IOException {
  317. File file = new File("c:\\" + MimeUtility.decodeText(message.getSubject())+".eml");
  318. message.writeTo(new FileOutputStream(file));
  319. return file;
  320. }
  321.  
  322. /**
  323. * 发送本地已经生成好的email文件
  324. */
  325. public static void sendMailForEml(File eml) throws Exception {
  326. // 获得邮件会话
  327. Session session = Session.getInstance(props,new MyAuthenticator());
  328. // 获得邮件内容,即发生前生成的eml文件
  329. InputStream is = new FileInputStream(eml);
  330. MimeMessage message = new MimeMessage(session,is);
  331. //发送邮件
  332. Transport.send(message);
  333. }
  334.  
  335. /**
  336. * 向邮件服务器提交认证信息
  337. */
  338. static class MyAuthenticator extends Authenticator {
  339.  
  340. private String username = "";
  341.  
  342. private String password = "";
  343.  
  344. public MyAuthenticator() {
  345. super();
  346. this.password=senduserPwd;
  347. this.username=senduserName;
  348. }
  349.  
  350. public MyAuthenticator(String username, String password) {
  351. super();
  352. this.username = username;
  353. this.password = password;
  354. }
  355.  
  356. @Override
  357. protected PasswordAuthentication getPasswordAuthentication() {
  358.  
  359. return new PasswordAuthentication(username, password);
  360. }
  361. }
  362. }

DEMO2代码事例:

  1. package com.justin.framework.core.utils.email;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Properties;
  5. import java.util.Set;
  6. import javax.activation.DataHandler;
  7. import javax.activation.FileDataSource;
  8. import javax.mail.Address;
  9. import javax.mail.BodyPart;
  10. import javax.mail.Message;
  11. import javax.mail.Multipart;
  12. import javax.mail.Session;
  13. import javax.mail.Transport;
  14. import javax.mail.internet.InternetAddress;
  15. import javax.mail.internet.MimeBodyPart;
  16. import javax.mail.internet.MimeMessage;
  17. import javax.mail.internet.MimeMultipart;
  18. import javax.mail.internet.MimeUtility;
  19. public class MailManagerUtils {
  20. //发送邮件
  21. public static boolean sendMail(Email email) {
  22. String subject = email.getSubject();
  23. String content = email.getContent();
  24. String[] recievers = email.getRecievers();
  25. String[] copyto = email.getCopyto();
  26. String attbody = email.getAttbody();
  27. String[] attbodys = email.getAttbodys();
  28. if(recievers == null || recievers.length <=0) {
  29. return false;
  30. }
  31. try {
  32. Properties props =new Properties();
  33. props.setProperty("mail.enable", "true");
  34. props.setProperty("mail.protocal", "smtp");
  35. props.setProperty("mail.smtp.auth", "true");
  36. props.setProperty("mail.user", "tdbjrcrm@tdb.com");
  37. props.setProperty("mail.pass", "New***");
  38. props.setProperty("mail.smtp.host","mail.tdb.com");
  39.  
  40. props.setProperty("mail.smtp.from","tdbjrcrm@tdb.com");
  41. props.setProperty("mail.smtp.fromname","tdbVC");
  42.  
  43. // 创建一个程序与邮件服务器的通信
  44. Session mailConnection = Session.getInstance(props, null);
  45. Message msg = new MimeMessage(mailConnection);
  46.  
  47. // 设置发送人和接受人
  48. Address sender = new InternetAddress(props.getProperty("mail.smtp.from"));
  49. // 多个接收人
  50. msg.setFrom(sender);
  51.  
  52. Set<InternetAddress> toUserSet = new HashSet<InternetAddress>();
  53. // 邮箱有效性较验
  54. for (int i = 0; i < recievers.length; i++) {
  55. if (recievers[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")) {
  56. toUserSet.add(new InternetAddress(recievers[i].trim()));
  57. }
  58. }
  59. msg.setRecipients(Message.RecipientType.TO, toUserSet.toArray(new InternetAddress[0]));
  60. // 设置抄送
  61. if (copyto != null) {
  62. Set<InternetAddress> copyToUserSet = new HashSet<InternetAddress>();
  63. // 邮箱有效性较验
  64. for (int i = 0; i < copyto.length; i++) {
  65. if (copyto[i].trim().matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)+$")) {
  66. copyToUserSet.add(new InternetAddress(copyto[i].trim()));
  67. }
  68. }
  69. // msg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
  70. msg.setRecipients(Message.RecipientType.CC, copyToUserSet.toArray(new InternetAddress[0]));
  71. }
  72. // 设置邮件主题
  73. msg.setSubject(MimeUtility.encodeText(subject, "UTF-8", "B")); // 中文乱码问题
  74.  
  75. // 设置邮件内容
  76. BodyPart messageBodyPart = new MimeBodyPart();
  77. messageBodyPart.setContent(content, "text/html; charset=UTF-8"); // 中文
  78. Multipart multipart = new MimeMultipart();
  79. multipart.addBodyPart(messageBodyPart);
  80. msg.setContent(multipart);
  81.  
  82. /********************** 发送附件 ************************/
  83. if (attbody != null) {
  84. String[] filePath = attbody.split(";");
  85. for (String filepath : filePath) {
  86. //设置信件的附件(用本地机上的文件作为附件)
  87. BodyPart mdp = new MimeBodyPart();
  88. FileDataSource fds = new FileDataSource(filepath);
  89. DataHandler dh = new DataHandler(fds);
  90. mdp.setFileName(MimeUtility.encodeText(fds.getName()));
  91. mdp.setDataHandler(dh);
  92. multipart.addBodyPart(mdp);
  93. }
  94. //把mtp作为消息对象的内容
  95. msg.setContent(multipart);
  96. };
  97. if (attbodys != null) {
  98. for (String filepath : attbodys) {
  99. //设置信件的附件(用本地机上的文件作为附件)
  100. BodyPart mdp = new MimeBodyPart();
  101. FileDataSource fds = new FileDataSource(filepath);
  102. DataHandler dh = new DataHandler(fds);
  103. mdp.setFileName(MimeUtility.encodeText(fds.getName()));
  104. mdp.setDataHandler(dh);
  105. multipart.addBodyPart(mdp);
  106. }
  107. //把mtp作为消息对象的内容
  108. msg.setContent(multipart);
  109. }
  110. ;
  111. /********************** 发送附件结束 ************************/
  112.  
  113. // 先进行存储邮件
  114. msg.saveChanges();
  115. System.out.println("正在发送邮件....");
  116. Transport trans = mailConnection.getTransport(props.getProperty("mail.protocal"));
  117. // 邮件服务器名,用户名,密码
  118. trans.connect(props.getProperty("mail.smtp.host"), props.getProperty("mail.user"), props.getProperty("mail.pass"));
  119. trans.sendMessage(msg, msg.getAllRecipients());
  120. System.out.println("发送邮件成功!");
  121.  
  122. // 关闭通道
  123. if (trans.isConnected()) {
  124. trans.close();
  125. }
  126. return true;
  127. } catch (Exception e) {
  128. System.err.println("邮件发送失败!" + e);
  129. return false;
  130. } finally {
  131. }
  132. }
  133.  
  134. // 发信人,收信人,回执人邮件中有中文处理乱码,res为获取的地址
  135. // http默认的编码方式为ISO8859_1
  136. // 对含有中文的发送地址,使用MimeUtility.decodeTex方法
  137. // 对其他则把地址从ISO8859_1编码转换成gbk编码
  138. public static String getChineseFrom(String res) {
  139. String from = res;
  140. try {
  141. if (from.startsWith("=?GB") || from.startsWith("=?gb") || from.startsWith("=?UTF")) {
  142. from = MimeUtility.decodeText(from);
  143. } else {
  144. from = new String(from.getBytes("ISO8859_1"), "GBK");
  145. }
  146. } catch (Exception e) {
  147. e.printStackTrace();
  148. }
  149. return from;
  150. }
  151.  
  152. // 转换为GBK编码
  153. public static String toChinese(String strvalue) {
  154. try {
  155. if (strvalue == null)
  156. return null;
  157. else {
  158. strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
  159. return strvalue;
  160. }
  161. } catch (Exception e) {
  162. return null;
  163. }
  164. }
  165. public static void main(String[] args) {
  166. Email email=new Email();
  167. email.setRecievers(new String[]{"db_yangruirui@tdbcwgs.com"});
  168. email.setSubject("TEST测件");
  169. email.setContent("TEST测试");
  170. sendMail(email);
  171. }
  172.  
  173. }

Java实现邮件发送的更多相关文章

  1. 用java实现邮件发送验证码

    java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SMTP服务没弄好.所以建议注册个别的邮箱,我就申请了个网易163邮箱瞬 ...

  2. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  3. java spring 邮件发送

    开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...

  4. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

  5. JAVA实现邮件发送功能(账号注册验证码、账号激活等)

    第一步,导入JAR包,JAR包下载地址[http://pan.baidu.com/s/1kVRvGyF] 如果是Maven,请直接在Pom文件中加入 <dependency> <gr ...

  6. Java Mail 邮件发送简单封装

    上一篇文章我们用写了一个Java Mail 的Demo,相信你已经可以用那个例子来发送邮件了.但是Demo 有很多的问题. 首先每次发送需要配置的东西很多,包括发件人的邮箱和密码.smtp服务器和SM ...

  7. Java Mail 邮件发送Demo

    上周公司的项目要求开发邮件发送功能.自己在网上跟着教程边学边做了一下午,现在基本开发完成了.由于一个同事也想看下该怎么写,顺便学习下.所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容. Demo ...

  8. 纯java实现邮件发送服务(亲测好用)

    今天自己测试了一下用java代码实现发送有限的服务,非常简单.直接贴代码: import com.sun.mail.util.MailSSLSocketFactory; import javax.ma ...

  9. Java Mail邮件发送的简单实现

    1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...

随机推荐

  1. 浅谈jquery之on()绑定事件和off()解除绑定事件

    off()函数用于移除元素上绑定的一个或多个事件的事件处理函数. off()函数主要用于解除由on()函数绑定的事件处理函数. 该函数属于jQuery对象(实例). 语法 jQuery 1.7 新增该 ...

  2. NGSQC toolkit

    一.NGSQCTooklit 使用 主要是去除dapter和低质量的碱基,并有统计结果 可以得到如下的结果 1,每个位置的碱基的平均质量 2,每个GC值对应的reads数 3,每个质量值对应的read ...

  3. BZOJ4530:[BJOI2014]大融合(LCT)

    Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它 ...

  4. Linux实用指令(1):运行级别&找回密码&帮助指令&文件目录类

    指令运行级别: 0 :关机 1 :单用户[找回丢失密码] 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重启   常用运行级别是3和5 ,要修改 ...

  5. vue使用element案列

    第一步:使用vue创建项目‘ 第二步:在项目添加element cmd:vue add element demo:https://github.com/weibanggang/vuemode.git

  6. CodeForces - 616C(很有意思的bfs,set,map的使用)

    传送门: http://codeforces.com/problemset/problem/616/C C. The Labyrinth time limit per test 1 second me ...

  7. JS n秒后自动跳转实例

    <p><a href="<?php echo base_url();?>usercenter/index" id="message" ...

  8. Unity3D Errors And Fix

    Author Error: Shader warning in 'Custom/ShowAnimation': Not enough temporary registers, needs 9 (com ...

  9. python 输入三个整数,按照从小到大的顺序打印

    # # 3 输入三个整数,按照从小到大的顺序打印 a = int(input('请输入第一个整数:')) b = int(input('请输入第二个整数:')) c = int(input('请输入第 ...

  10. 基于jQuery+JSON的省市县 二级 三级 联动效果

    省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉 ...