今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵

以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。jar包因为我不知道怎么传到javaeye上,所以朋友们回去自己打吧。 
我的代码有三个类: 
第一个类:MailSenderInfo.java

  1. package com.util.mail;
  2. /**
  3. * 发送邮件需要使用的基本信息
  4. */
  5. import java.util.Properties;
  6. public class MailSenderInfo {
  7. // 发送邮件的服务器的IP和端口
  8. private String mailServerHost;
  9. private String mailServerPort = "25";
  10. // 邮件发送者的地址
  11. private String fromAddress;
  12. // 邮件接收者的地址
  13. private String toAddress;
  14. // 登陆邮件发送服务器的用户名和密码
  15. private String userName;
  16. private String password;
  17. // 是否需要身份验证
  18. private boolean validate = false;
  19. // 邮件主题
  20. private String subject;
  21. // 邮件的文本内容
  22. private String content;
  23. // 邮件附件的文件名
  24. private String[] attachFileNames;
  25. /**
  26. * 获得邮件会话属性
  27. */
  28. public Properties getProperties(){
  29. Properties p = new Properties();
  30. p.put("mail.smtp.host", this.mailServerHost);
  31. p.put("mail.smtp.port", this.mailServerPort);
  32. p.put("mail.smtp.auth", validate ? "true" : "false");
  33. return p;
  34. }
  35. public String getMailServerHost() {
  36. return mailServerHost;
  37. }
  38. public void setMailServerHost(String mailServerHost) {
  39. this.mailServerHost = mailServerHost;
  40. }
  41. public String getMailServerPort() {
  42. return mailServerPort;
  43. }
  44. public void setMailServerPort(String mailServerPort) {
  45. this.mailServerPort = mailServerPort;
  46. }
  47. public boolean isValidate() {
  48. return validate;
  49. }
  50. public void setValidate(boolean validate) {
  51. this.validate = validate;
  52. }
  53. public String[] getAttachFileNames() {
  54. return attachFileNames;
  55. }
  56. public void setAttachFileNames(String[] fileNames) {
  57. this.attachFileNames = fileNames;
  58. }
  59. public String getFromAddress() {
  60. return fromAddress;
  61. }
  62. public void setFromAddress(String fromAddress) {
  63. this.fromAddress = fromAddress;
  64. }
  65. public String getPassword() {
  66. return password;
  67. }
  68. public void setPassword(String password) {
  69. this.password = password;
  70. }
  71. public String getToAddress() {
  72. return toAddress;
  73. }
  74. public void setToAddress(String toAddress) {
  75. this.toAddress = toAddress;
  76. }
  77. public String getUserName() {
  78. return userName;
  79. }
  80. public void setUserName(String userName) {
  81. this.userName = userName;
  82. }
  83. public String getSubject() {
  84. return subject;
  85. }
  86. public void setSubject(String subject) {
  87. this.subject = subject;
  88. }
  89. public String getContent() {
  90. return content;
  91. }
  92. public void setContent(String textContent) {
  93. this.content = textContent;
  94. }
  95. }

第二个类:SimpleMailSender.java

  1. package com.util.mail;
  2. import java.util.Date;
  3. import java.util.Properties;
  4. import javax.mail.Address;
  5. import javax.mail.BodyPart;
  6. import javax.mail.Message;
  7. import javax.mail.MessagingException;
  8. import javax.mail.Multipart;
  9. import javax.mail.Session;
  10. import javax.mail.Transport;
  11. import javax.mail.internet.InternetAddress;
  12. import javax.mail.internet.MimeBodyPart;
  13. import javax.mail.internet.MimeMessage;
  14. import javax.mail.internet.MimeMultipart;
  15. /**
  16. * 简单邮件(不带附件的邮件)发送器
  17. */
  18. public class SimpleMailSender  {
  19. /**
  20. * 以文本格式发送邮件
  21. * @param mailInfo 待发送的邮件的信息
  22. */
  23. public boolean sendTextMail(MailSenderInfo mailInfo) {
  24. // 判断是否需要身份认证
  25. MyAuthenticator authenticator = null;
  26. Properties pro = mailInfo.getProperties();
  27. if (mailInfo.isValidate()) {
  28. // 如果需要身份认证,则创建一个密码验证器
  29. authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
  30. }
  31. // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  32. Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
  33. try {
  34. // 根据session创建一个邮件消息
  35. Message mailMessage = new MimeMessage(sendMailSession);
  36. // 创建邮件发送者地址
  37. Address from = new InternetAddress(mailInfo.getFromAddress());
  38. // 设置邮件消息的发送者
  39. mailMessage.setFrom(from);
  40. // 创建邮件的接收者地址,并设置到邮件消息中
  41. Address to = new InternetAddress(mailInfo.getToAddress());
  42. mailMessage.setRecipient(Message.RecipientType.TO,to);
  43. // 设置邮件消息的主题
  44. mailMessage.setSubject(mailInfo.getSubject());
  45. // 设置邮件消息发送的时间
  46. mailMessage.setSentDate(new Date());
  47. // 设置邮件消息的主要内容
  48. String mailContent = mailInfo.getContent();
  49. mailMessage.setText(mailContent);
  50. // 发送邮件
  51. Transport.send(mailMessage);
  52. return true;
  53. } catch (MessagingException ex) {
  54. ex.printStackTrace();
  55. }
  56. return false;
  57. }
  58. /**
  59. * 以HTML格式发送邮件
  60. * @param mailInfo 待发送的邮件信息
  61. */
  62. public static boolean sendHtmlMail(MailSenderInfo mailInfo){
  63. // 判断是否需要身份认证
  64. MyAuthenticator authenticator = null;
  65. Properties pro = mailInfo.getProperties();
  66. //如果需要身份认证,则创建一个密码验证器
  67. if (mailInfo.isValidate()) {
  68. authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
  69. }
  70. // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  71. Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
  72. try {
  73. // 根据session创建一个邮件消息
  74. Message mailMessage = new MimeMessage(sendMailSession);
  75. // 创建邮件发送者地址
  76. Address from = new InternetAddress(mailInfo.getFromAddress());
  77. // 设置邮件消息的发送者
  78. mailMessage.setFrom(from);
  79. // 创建邮件的接收者地址,并设置到邮件消息中
  80. Address to = new InternetAddress(mailInfo.getToAddress());
  81. // Message.RecipientType.TO属性表示接收者的类型为TO
  82. mailMessage.setRecipient(Message.RecipientType.TO,to);
  83. // 设置邮件消息的主题
  84. mailMessage.setSubject(mailInfo.getSubject());
  85. // 设置邮件消息发送的时间
  86. mailMessage.setSentDate(new Date());
  87. // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
  88. Multipart mainPart = new MimeMultipart();
  89. // 创建一个包含HTML内容的MimeBodyPart
  90. BodyPart html = new MimeBodyPart();
  91. // 设置HTML内容
  92. html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
  93. mainPart.addBodyPart(html);
  94. // 将MiniMultipart对象设置为邮件内容
  95. mailMessage.setContent(mainPart);
  96. // 发送邮件
  97. Transport.send(mailMessage);
  98. return true;
  99. } catch (MessagingException ex) {
  100. ex.printStackTrace();
  101. }
  102. return false;
  103. }
  104. }

第三个类:MyAuthenticator.java

  1. package com.util.mail;
  2. import javax.mail.*;
  3. public class MyAuthenticator extends Authenticator{
  4. String userName=null;
  5. String password=null;
  6. public MyAuthenticator(){
  7. }
  8. public MyAuthenticator(String username, String password) {
  9. this.userName = username;
  10. this.password = password;
  11. }
  12. protected PasswordAuthentication getPasswordAuthentication(){
  13. return new PasswordAuthentication(userName, password);
  14. }
  15. }

下面给出使用上面三个类的代码:

  1. public static void main(String[] args){
  2. //这个类主要是设置邮件
  3. MailSenderInfo mailInfo = new MailSenderInfo();
  4. mailInfo.setMailServerHost("smtp.163.com");
  5. mailInfo.setMailServerPort("25");
  6. mailInfo.setValidate(true);
  7. mailInfo.setUserName("han2000lei@163.com");
  8. mailInfo.setPassword("**********");//您的邮箱密码
  9. mailInfo.setFromAddress("han2000lei@163.com");
  10. mailInfo.setToAddress("han2000lei@163.com");
  11. mailInfo.setSubject("设置邮箱标题");
  12. mailInfo.setContent("设置邮箱内容");
  13. //这个类主要来发送邮件
  14. SimpleMailSender sms = new SimpleMailSender();
  15. sms.sendTextMail(mailInfo);//发送文体格式
  16. sms.sendHtmlMail(mailInfo);//发送html格式
  17. }

最后,给出朋友们几个注意的地方: 
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。 
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中 
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。 
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。 
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

http://www.iteye.com/topic/352753

MailSenderInfo mailInfo = new MailSenderInfo();    
    mailInfo.setMailServerHost("smtp.qq.com");    
    mailInfo.setMailServerPort("25");    
    mailInfo.setValidate(true);    
    mailInfo.setUserName("**@qq.com");    
    mailInfo.setPassword("**");//您的邮箱密码    
    mailInfo.setFromAddress("**@qq.com");    
    mailInfo.setToAddress("**@qq.com");    
    mailInfo.setSubject("设置邮箱标题");    
    mailInfo.setContent("设置邮箱内容");    
       //这个类主要来发送邮件   
    SimpleMailSender sms = new SimpleMailSender();   
    sms.sendTextMail(mailInfo);//发送文体格式    
    sms.sendHtmlMail(mailInfo);//发送html格式  
报这个错误 
javax.mail.SendFailedException: Sending failed; 
  nested exception is: 
class javax.mail.AuthenticationFailedException 
at javax.mail.Transport.send0(Transport.java:218) 
at javax.mail.Transport.send(Transport.java:80) 
at com.mail.SimpleMailSender.sendTextMail(SimpleMailSender.java:48) 
at com.mail.Mail.main(Mail.java:18) 
javax.mail.SendFailedException: Sending failed;

这个异常同样是验证失败的一个异常,建议你仔细检查。另外,我没有用过qq作为smtp来发送邮件,不知道效果怎么样。你可以再换一下163、126、gmail这样的邮箱来试一下(如果你有的话)

mailInfo.setValidate(false);  必须设为true,因为现在不是你自己的邮件服务器,163的服务器是需要验证的

而且你必须使用 
mailInfo.setUserName("**@163.com");    
mailInfo.setPassword("**********"); 
来进行验证。就是你的邮箱名和密码。如果没有163的邮箱,就改用别的吧

javamail发送邮件(转)的更多相关文章

  1. JavaMail发送邮件

    发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄 ...

  2. JavaMail发送邮件第一版

    首先,我们先来了解一个基本的知识点,用什么工具来发邮件? 简单的说一下,目前用的比较多的客户端:OutLook,Foxmail等 顺便了解一下POP3.SMTP协议的区别: POP3,全名为" ...

  3. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  4. JavaMail发送邮件的笔记及Demo

    最近碰到一个需求,就是注册用户时候需要向用户发送激活邮箱,于是照着网上搜来的demo自己试着运行了一下,发件时我用的是网易163邮箱,收件时用QQ邮箱,运行后报了一个错误: 网络上搜索解决方式,多次尝 ...

  5. web应用中使用JavaMail发送邮件 。。转载

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  6. (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...

  7. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  8. javamail发送邮件的简单实例

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...

  9. javamail发送邮件的简单实例(转)

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 注意:要先导入javamail的mail.jar ...

  10. javamail发送邮件的简单实例(转)

    javamail发送邮件的简单实例 今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码 ...

随机推荐

  1. JQuery 插件之Ajax Autocomplete(ajax自动完成)

    平时用百度,谷歌搜索的时候 会有一个下 拉列表进行提示 这是一个非常好的功能 本文要介绍的这个JQuery 插件 名叫Ajax Autocomplete 顾名思义 ajax 也就是用ajax的方式获取 ...

  2. Nginx 訪问日志增长暴增出现尖刀的具体分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问 ...

  3. oracle RAC搭建中的潜规则 该死的app

    oracle RAC 安装目录必须是 ORACLE_BASE=/u01/app/grid ORACLE_HOME=/u01/app/11.2.0/grid 看着中间有个app,又没什么实际用处,就删掉 ...

  4. Mysql 官方Memcached 插件初步试用感受 - schweigen - ITeye技术网站

    Mysql 官方Memcached 插件初步试用感受 - schweigen - ITeye技术网站 Mysql 官方Memcached 插件初步试用感受

  5. 在gfs2中关闭selinux

    在构建iSCSI存储集群时,请勿在gfs2中使用selinux

  6. 应用程序初始化正常(0xc015002)失败解决方法

    VS2005 sidebyside manifest error Microsoft.VC80.MFC Microsoft.VC80.CRT Microsoft.VC80.MFCLOC msvcr80 ...

  7. Java Core和HeapDump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  8. drupal 7 模块开发,hook_form

    因为不是系统学习,只能把每天自己学习到的东西零碎的记录下来. 一来方便自己记忆,二来可供大家查阅. 后续有精力再去做进一步的整理. 1 开发一个模块分为有下面几个文件 hook.admin.inc h ...

  9. 【从0到1学Web前端】CSS伪类和伪元素

    1.CSS中的伪类 CSS 伪类用于向某些选择器加入特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 select ...

  10. MVC多语言应用

    MVC多语言应用 最近发现资源文件是个好东西, 用的好了可以给开发人员借阅不少的时间. 例如做一个多语言的网站, 资源文件就有不小的用处. 这里以MVC4模版项目的登录页为例, 简单说一下过程: 1. ...