• javamail发送邮件


    今天学习了一下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 
    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验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。 




    -------------------------------------------------------------------------------------------------华丽分割线-----------------------------------------------------------------------------------------------------------------------

    老师让做的项目要用到邮箱验证,网上找了半天,这个亲测成功!原帖地址

    jar包要在http://www.oracle.com/technetwork/java/javamail/index-138643.html下载!

    随便附上常用邮箱:

    常用的邮箱服务器(SMTP、POP3)地址、端口 
     
    sina.com: 
    POP3服务器地址:pop3.sina.com.cn(端口:110) SMTP服务器地址:smtp.sina.com.cn(端口:25)   
    sinaVIP: 
    POP3服务器:pop3.vip.sina.com (端口:110) SMTP服务器:smtp.vip.sina.com (端口:25)  
    sohu.com: 
    POP3服务器地址:pop3.sohu.com(端口:110) SMTP服务器地址:smtp.sohu.com(端口:25)  
    126邮箱: 
    POP3服务器地址:pop.126.com(端口:110) SMTP服务器地址:smtp.126.com(端口:25)  
    139邮箱: 
    POP3服务器地址:POP.139.com(端口:110) SMTP服务器地址:SMTP.139.com(端口:25)  
    163.com: 
    POP3服务器地址:pop.163.com(端口:110) SMTP服务器地址:smtp.163.com(端口:25)  
    QQ邮箱  
    POP3服务器地址:pop.qq.com(端口:110) 
    SMTP服务器地址:smtp.qq.com (端口:25)  
    QQ企业邮箱 
    POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995) SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)  
    yahoo.com: 
    POP3服务器地址:pop.mail.yahoo.com SMTP服务器地址:smtp.mail.yahoo.com  
    yahoo.com.cn: 
    POP3服务器地址:pop.mail.yahoo.com.cn(端口:995) SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587  

    HotMail 
    POP3服务器地址:pop3.live.com (端口:995) SMTP服务器地址:smtp.live.com (端口:587)  
    gmail(google.com) 
    POP3服务器地址:pop.gmail.com(SSL启用 端口:995) SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)  
    263.net: 
    POP3服务器地址:pop3.263.net(端口:110) SMTP服务器地址:smtp.263.net(端口:25)  
    263.net.cn: 
    POP3服务器地址:pop.263.net.cn(端口:110) SMTP服务器地址:smtp.263.net.cn(端口:25)  
    x263.net: 
    POP3服务器地址:pop.x263.net(端口:110) SMTP服务器地址:smtp.x263.net(端口:25)  
    21cn.com: 
    POP3服务器地址:pop.21cn.com(端口:110) SMTP服务器地址:smtp.21cn.com(端口:25)  
    Foxmail: 
    POP3服务器地址:POP.foxmail.com(端口:110) SMTP服务器地址:SMTP.foxmail.com(端口:25)  
    china.com: 
    POP3服务器地址:pop.china.com(端口:110) SMTP服务器地址:smtp.china.com(端口:25)  
    tom.com: 
    POP3服务器地址:pop.tom.com(端口:110) SMTP服务器地址:smtp.tom.com(端口:25)  
    etang.com: 
    POP3服务器地址:pop.etang.com SMTP服务器地址:smtp.etang.com 

  • 相关阅读:
    正方形_自适应_移动端
    meta name="viewport" content="width=device-width,initial-scale=1.0"
    :before/:after与::before/::after的区别 和属性content:值
    布局:flex弹性布局_兼容性写法
    布局:文本多列布局 column-* :
    布局:网格布局
    clear
    布局:盒模型 box-sizing : border-box ;
    object-fit : cover; 对象(图片和视频对象)
    布局:flex弹性布局_实践02
  • 原文地址:https://www.cnblogs.com/kiwifly/p/4435867.html
Copyright © 2020-2023  润新知