zoukankan      html  css  js  c++  java
  • javamail发送邮件(转)

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

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

    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 

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


    第三个类:MyAuthenticator.java 

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


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

    Java代码  收藏代码
    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的邮箱,就改用别的吧

  • 相关阅读:
    wget时http无效问题
    mysql8.0.15的最简单安装
    创建时间时jdbcType使用的准确性
    fastJson的几种转换模式
    (mybatis)EnumTypeHandler和EnumOrdinalTypeHandler的区别
    在文件上传时fileName.endsWith()的获取后悔
    day22
    day21
    day20
    day19
  • 原文地址:https://www.cnblogs.com/softidea/p/5348061.html
Copyright © 2011-2022 走看看