JAVAMAIL 邮件发送器

来源:互联网 发布:淘宝都是天猫 编辑:程序博客网 时间:2024/04/30 07:36

邮件基本信息类

1、邮件信息类MailSenderInfo

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;        }    }  

2、用户密码类MyAuthenticator

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);       }   }   

3、以HTML格式发送邮件 SimpleMailSender

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  {        /**         * 以HTML格式发送邮件         * @param mailInfo 待发送的邮件信息        * @throws MessagingException       */        public  void sendHtmlMail(MailSenderInfo mailInfo) throws MessagingException{          // 判断是否需要身份认证          MyAuthenticator authenticator = null;         Properties pro = mailInfo.getProperties();         //如果需要身份认证,则创建一个密码验证器           if (mailInfo.isValidate()) {            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());         }          // 根据邮件会话属性和密码验证器构造一个发送邮件的session          Session sendMailSession = Session.getDefaultInstance(pro,authenticator);          // 根据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);        }    }   

4、邮件工具类SentMailTool

package com.util.mail;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.Properties;import org.activiti.engine.impl.util.json.JSONObject;import org.apache.commons.lang.StringUtils;public class SentMailTool {    private Properties properties = new Properties();    MailSenderInfo mailInfo = new MailSenderInfo();        private String mailHost = "";    private String sender_username = "";    private String sender_password = "";    private String sender_nick = "";    private String mailPort = "";    private boolean mailAuth =false;    /**     * @Title:SentMailTool     * @Description:初始化     */    public SentMailTool(){        InputStream in = SentMailTool.class.getResourceAsStream("/portlet.properties");        try {            properties.load(in);            this.mailHost = properties.getProperty("mail.smtp.host");            this.mailPort = properties.getProperty("mail.smtp.port");            this.mailAuth =Boolean.parseBoolean(properties.getProperty("mail.smtp.auth"));            this.sender_username = properties.getProperty("mail.sender.username");            this.sender_password = properties.getProperty("mail.sender.password");            this.sender_nick = properties.getProperty("mail.sender.nick");            //设置邮件参数            mailInfo.setMailServerHost(this.mailHost);                mailInfo.setMailServerPort(this.mailPort);                mailInfo.setValidate(this.mailAuth);                mailInfo.setUserName(this.sender_username);                mailInfo.setPassword(this.sender_password);//您的邮箱密码                if(StringUtils.isNotBlank(this.sender_nick)){                mailInfo.setFromAddress(sender_nick+" <"+this.sender_username+">");                }else{                mailInfo.setFromAddress(this.sender_username);                }        } catch (IOException e) {            e.printStackTrace();        }    }    /**     *      * @Title: toSendHtmlMail     * @Description: 发送HTML格式的邮件     * @param mailAddress   接受邮箱地址     * @param title         邮件标题     * @param message       邮件内容     * @return     * @return: boolean     */    public  JSONObject toSendHtmlMail(String mailAddress,String title,String message){        JSONObject json=new JSONObject();        try {            mailInfo.setToAddress(mailAddress);                mailInfo.setSubject(title);                mailInfo.setContent(message);              //这个类主要来发送邮件               SimpleMailSender sms = new SimpleMailSender();               sms.sendHtmlMail(mailInfo);//发送html格式             json.put("result", true);        }catch (Exception e) {            e.printStackTrace();            json.put("message", getErrorMessasge(e.getMessage()));            json.put("result", false);        }        return json;    }    /**     * 获取失败信息     * @param message     */    private String getErrorMessasge(String message) {         Map<String,String> map=new HashMap<String,String>();         map.put("There are no DNS entries for the hostname, I cannot determine where to send this message", "检索不到接收方域名的邮件解析(MX记录)和域名解析(A记录)");         map.put("Connection refused: connect.", "无法建立SMTP连接或者对方服务器忙");         map.put("invalid address", "没有这个收件人");         map.put("User unknown", "没有这个收件人");         map.put("user is not found", "没有这个收件人");         map.put("552Message size exceeds fixed limit", "您发给对方的信件大小超过了对方允许的范围");         map.put("receiptor's mailbox is full(#5.5.4)", "对方邮箱已满");         map.put("Quota exceed the hard limit for user ", "对方邮箱已满");         map.put("Connected to remote host, but it does not like recipient.", "连接到接收方邮件服务器,但接收地址不存在");         map.put("Connected to remote host, but sender was rejected.", "连接到接收方邮件服务器,但投递地址被拒绝。");         map.put("Connected to remote host, but failed after I sent the message", "连接到接收方邮件服务器,但发送邮件失败。");         map.put("Sorry, I couldn't find any hostnamed ", "没有这个主机。");         map.put("553 Invalid sender", "投递方发信地址伪装,被对方邮局拒绝");         map.put("550", "请检查收信人的邮件地址是否有误。");         map.put("554 ", "发信服务器拒绝发送");         map.put("timed out", "发送超时");         boolean flag=false;         for(String s:map.keySet()){             if(message.contains(s)){                 message=map.get(s);                 flag=true;             }         }         if(!flag){             message="未知错误";         }         return message;    }}

5、 发送邮件服务器配置文件portlet.properties

#邮件服务器配置#smtp 服务器mail.smtp.host=smtp.163.com#身份验证,默认truemail.smtp.auth=true#端口号mail.smtp.port=25#发送者的邮箱用户名mail.sender.username=longchengguoke@163.com#发送者的邮箱密码mail.sender.password=123456asd#发送者想要显示的昵称,选填mail.sender.nick=Mr.cheng

6、备注:上边这个邮件服务器配置可以直接使用,如果密码不对可以找我要最新的授权码,也可以自己申请163邮箱服务器

0 0