kilowen 发表于 2013-2-3 11:28:25

javamail发送邮件

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

以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。jar包因为我不知道怎么传到javaeye上,所以朋友们回去自己打吧。
我的代码有三个类:
第一个类:MailSenderInfo.java
package com.util.mail;/*** 发送邮件需要使用的基本信息*/   import java.util.Properties;   public class MailSenderInfo {       // 发送邮件的服务器的IP和端口       private String mailServerHost;       private String mailServerPort = "25";       // 邮件发送者的地址       private String fromAddress;       // 邮件接收者的地址       private String toAddress;       // 登陆邮件发送服务器的用户名和密码       private String userName;       private String password;       // 是否需要身份验证       private boolean validate = false;       // 邮件主题       private String subject;       // 邮件的文本内容       private String content;       // 邮件附件的文件名       private String[] attachFileNames;         /**      * 获得邮件会话属性      */       public Properties getProperties(){         Properties p = new Properties();         p.put("mail.smtp.host", this.mailServerHost);         p.put("mail.smtp.port", this.mailServerPort);         p.put("mail.smtp.auth", validate ? "true" : "false");         return p;       }       public String getMailServerHost() {         return mailServerHost;       }       public void setMailServerHost(String mailServerHost) {         this.mailServerHost = mailServerHost;       }      public String getMailServerPort() {         return mailServerPort;       }      public void setMailServerPort(String mailServerPort) {         this.mailServerPort = mailServerPort;       }      public boolean isValidate() {         return validate;       }      public void setValidate(boolean validate) {         this.validate = validate;       }      public String[] getAttachFileNames() {         return attachFileNames;       }      public void setAttachFileNames(String[] fileNames) {         this.attachFileNames = fileNames;       }      public String getFromAddress() {         return fromAddress;       }       public void setFromAddress(String fromAddress) {         this.fromAddress = fromAddress;       }      public String getPassword() {         return password;       }      public void setPassword(String password) {         this.password = password;       }      public String getToAddress() {         return toAddress;       }       public void setToAddress(String toAddress) {         this.toAddress = toAddress;       }       public String getUserName() {         return userName;       }      public void setUserName(String userName) {         this.userName = userName;       }      public String getSubject() {         return subject;       }      public void setSubject(String subject) {         this.subject = subject;       }      public String getContent() {         return content;       }      public void setContent(String textContent) {         this.content = textContent;       }   }   

第二个类:SimpleMailSender.java

package com.util.mail;    import java.util.Date;   import java.util.Properties;import javax.mail.Address;   import javax.mail.BodyPart;   import javax.mail.Message;   import javax.mail.MessagingException;   import javax.mail.Multipart;   import javax.mail.Session;   import javax.mail.Transport;   import javax.mail.internet.InternetAddress;   import javax.mail.internet.MimeBodyPart;   import javax.mail.internet.MimeMessage;   import javax.mail.internet.MimeMultipart;   /*** 简单邮件(不带附件的邮件)发送器*/   public class SimpleMailSender{   /**    * 以文本格式发送邮件    * @param mailInfo 待发送的邮件的信息    */       public boolean sendTextMail(MailSenderInfo mailInfo) {         // 判断是否需要身份认证         MyAuthenticator authenticator = null;         Properties pro = mailInfo.getProperties();      if (mailInfo.isValidate()) {         // 如果需要身份认证,则创建一个密码验证器         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());         }      // 根据邮件会话属性和密码验证器构造一个发送邮件的session         Session sendMailSession = Session.getDefaultInstance(pro,authenticator);         try {         // 根据session创建一个邮件消息         Message mailMessage = new MimeMessage(sendMailSession);         // 创建邮件发送者地址         Address from = new InternetAddress(mailInfo.getFromAddress());         // 设置邮件消息的发送者         mailMessage.setFrom(from);         // 创建邮件的接收者地址,并设置到邮件消息中         Address to = new InternetAddress(mailInfo.getToAddress());         mailMessage.setRecipient(Message.RecipientType.TO,to);         // 设置邮件消息的主题         mailMessage.setSubject(mailInfo.getSubject());         // 设置邮件消息发送的时间         mailMessage.setSentDate(new Date());         // 设置邮件消息的主要内容         String mailContent = mailInfo.getContent();         mailMessage.setText(mailContent);         // 发送邮件         Transport.send(mailMessage);      return true;         } catch (MessagingException ex) {             ex.printStackTrace();         }         return false;       }             /**      * 以HTML格式发送邮件      * @param mailInfo 待发送的邮件信息      */       public static boolean sendHtmlMail(MailSenderInfo mailInfo){         // 判断是否需要身份认证         MyAuthenticator authenticator = null;      Properties pro = mailInfo.getProperties();      //如果需要身份认证,则创建一个密码验证器          if (mailInfo.isValidate()) {         authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());      }         // 根据邮件会话属性和密码验证器构造一个发送邮件的session         Session sendMailSession = Session.getDefaultInstance(pro,authenticator);         try {         // 根据session创建一个邮件消息         Message mailMessage = new MimeMessage(sendMailSession);         // 创建邮件发送者地址         Address from = new InternetAddress(mailInfo.getFromAddress());         // 设置邮件消息的发送者         mailMessage.setFrom(from);         // 创建邮件的接收者地址,并设置到邮件消息中         Address to = new InternetAddress(mailInfo.getToAddress());         // Message.RecipientType.TO属性表示接收者的类型为TO         mailMessage.setRecipient(Message.RecipientType.TO,to);         // 设置邮件消息的主题         mailMessage.setSubject(mailInfo.getSubject());         // 设置邮件消息发送的时间         mailMessage.setSentDate(new Date());         // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象         Multipart mainPart = new MimeMultipart();         // 创建一个包含HTML内容的MimeBodyPart         BodyPart html = new MimeBodyPart();         // 设置HTML内容         html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");         mainPart.addBodyPart(html);         // 将MiniMultipart对象设置为邮件内容         mailMessage.setContent(mainPart);         // 发送邮件         Transport.send(mailMessage);         return true;         } catch (MessagingException ex) {             ex.printStackTrace();         }         return false;       }   }   

第三个类:MyAuthenticator.java

package com.util.mail;    import javax.mail.*;      public class MyAuthenticator extends Authenticator{      String userName=null;      String password=null;             public MyAuthenticator(){      }      public MyAuthenticator(String username, String password) {         this.userName = username;         this.password = password;       }       protected PasswordAuthentication getPasswordAuthentication(){          return new PasswordAuthentication(userName, password);      }}   下面给出使用上面三个类的代码: Java代码 public static void main(String[] args){         //这个类主要是设置邮件      MailSenderInfo mailInfo = new MailSenderInfo();         mailInfo.setMailServerHost("smtp.163.com");         mailInfo.setMailServerPort("25");         mailInfo.setValidate(true);         mailInfo.setUserName("han2000lei@163.com");         mailInfo.setPassword("**********");//您的邮箱密码         mailInfo.setFromAddress("han2000lei@163.com");         mailInfo.setToAddress("han2000lei@163.com");         mailInfo.setSubject("设置邮箱标题");         mailInfo.setContent("设置邮箱内容");            //这个类主要来发送邮件      SimpleMailSender sms = new SimpleMailSender();            sms.sendTextMail(mailInfo);//发送文体格式             sms.sendHtmlMail(mailInfo);//发送html格式      }

最后,给出朋友们几个注意的地方:
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.cnblogs.com/liyazhou/archive/2010/08/20/1804927.html
页: [1]
查看完整版本: javamail发送邮件