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


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

    注意:要先导入javamail的mail.jar包。

    以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。

    第一个类:MailSenderInfo.java

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

    第二个类:SimpleMailSender.java

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

    第三个类:MyAuthenticator.java

     1 package com.util.mail;
     2 
     3 import javax.mail.*;
     4 
     5 /**
     6  * 身份认证
     7  */
     8 public class MyAuthenticator extends Authenticator {
     9     
    10     String userName = null;
    11     String password = null;
    12     
    13     public MyAuthenticator(){
    14         
    15     }
    16     
    17     public MyAuthenticator(String username, String password) {
    18         this.userName = username;
    19         this.password = password;
    20     }
    21 
    22     @Override
    23     protected PasswordAuthentication getPasswordAuthentication() {
    24         return new PasswordAuthentication(userName, password);
    25     }
    26 
    27 }

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

     1 package com.util.mail;
     2 
     3 /**
     4  * 发送邮件
     5  */
     6 public class Mail {
     7 
     8     /**
     9      * @param args
    10      */
    11     public static void main(String[] args) {
    12         //这个类主要是设置邮件
    13         MailSenderInfo mailInfo = new MailSenderInfo();
    14         mailInfo.setMailServerHost("smtp.126.com");
    15         mailInfo.setMailServerPort("25");
    16         mailInfo.setValidate(true);
    17         mailInfo.setUserName("test@126.com");
    18         mailInfo.setPassword("test");
    19         mailInfo.setFromAddress("test@126.com");
    20         mailInfo.setToAddress("test@qq.com");
    21         mailInfo.setSubject("设置邮箱标题 如http://www.guihua.org 中国桂花网");
    22         mailInfo.setContent("设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站==");
    23         //这个类主要来发送邮件
    24         SimpleMailSender sms = new SimpleMailSender();
    25         sms.sendTextMail(mailInfo);
    26         sms.sendHtmlMail(mailInfo);
    27     }
    28 
    29 }

    最后,给出朋友们几个注意的地方:
    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验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

  • 相关阅读:
    如何操作3D中的摄像机
    软件开发的未来,是MDA/MDD/面向模式/Plugin IDE吗?[转]
    Hibernate3一个不错的入门介绍
    C#中的== Equals 与 Java 的== Euqals
    The Attributes property of a ListItem control only works within an HtmlSelect control
    WebWork 与 Struts
    会计基本流程
    常用 js 函数
    SQL中的sysobjects与syscolumns
    一个Struts2的的辅助工具
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3272552.html
Copyright © 2020-2023  润新知