javamail发( 收)邮件

MyAuthenticator.java

package cn.com.vetc.survey.mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class MyAuthenticator extends Authenticator {
  private String userName=null; 
  private String password=null; 
       
     public MyAuthenticator(){ 
     } 
     public MyAuthenticator(String username, String password) {  
         this.userName = username;  
         this.password = password;  
     }  
    
     public String getUserName() {
   return userName;
  }
  public void setUserName(String userName) {
   this.userName = userName;
  }
  public String getPassword() {
   return password;
  }
  public void setPassword(String password) {
   this.password = password;
  }
  protected PasswordAuthentication getPasswordAuthentication(){ 
         return new PasswordAuthentication(userName, password); 
     } 

}

SimpleMail.java

package cn.com.vetc.survey.mail;

public class SimpleMail {
   // 发送邮件的服务器的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 String getSubject() {
  return subject;
 }
 public void setSubject(String subject) {
  this.subject = subject;
 }
 public String getContent() {
  return content;
 }
 public void setContent(String content) {
  this.content = content;
 }
 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 String getFromAddress() {
  return fromAddress;
 }
 public void setFromAddress(String fromAddress) {
  this.fromAddress = fromAddress;
 }
 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 getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public boolean isValidate() {
  return validate;
 }
 public void setValidate(boolean validate) {
  this.validate = validate;
 }
 public String[] getAttachFileNames() {
  return attachFileNames;
 }
 public void setAttachFileNames(String[] attachFileNames) {
  this.attachFileNames = attachFileNames;
 }
}

SimpleMailSender.java

package cn.com.vetc.survey.mail;

import java.util.List;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class SimpleMailSender {
 /**
  * 发送邮件的props文件
  */
 private transient Properties props = System.getProperties();
 /**
  * 邮件服务器登录验证
  */
 private transient MyAuthenticator authenticator;
 /**
  * 邮箱session
  */
 private transient Session session;

 /**
  * 初始化邮件发送器
  *
  * @param smtpHostName
  *            SMTP邮件服务器地址
  * @param username
  *            发送邮件的用户名(地址)
  * @param password
  *            发送邮件的密码         
  *  @param  smtpHostPort  
  *            SMTP邮件服务器端口号
  */
 public SimpleMailSender(String smtpHostName, String username,
   String password,String smtpHostPort) { 
  init(username, password, smtpHostName,smtpHostPort);
 }

 /**
  * 初始化邮件发送器
  *
  * @param username
  *            发送邮件的用户名(地址),并以此解析SMTP服务器地址
  * @param password
  *            发送邮件的密码
  */
 public SimpleMailSender(String username, String password,String smtpHostPort) {
  // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
  String smtpHostName = "smtp." + username.split("@")[1];
  init(username, password, smtpHostName,smtpHostPort);
 }

 /**
  * 初始化
  *
  * @param username
  *            发送邮件的用户名(地址)
  * @param password
  *            密码
  * @param smtpHostName
  *            SMTP主机地址
  */
 private void init(String username, String password, String smtpHostName,String smtpHostPort) {
  System.out.println("init:  "+username+"  "+password+"  "+smtpHostName);
  if("smtp.gmail.com".equals(smtpHostName.trim())){
     props.setProperty("mail.smtp.starttls.enable","true");
     props.setProperty("mail.smtp.socketFactory.port", "465");
     props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
     props.setProperty("mail.smtp.socketFactory.fallback", "false");
  
 }
  // 初始化props
  props.setProperty("mail.smtp.auth", "true");
  props.setProperty("mail.transport.protocol", "smtp");
  props.setProperty("mail.smtp.port",smtpHostPort);
  props.setProperty("mail.smtp.host", smtpHostName);
 
  // 验证
  authenticator = new  MyAuthenticator(username, password);
  // 创建session
  session = Session.getInstance(props,authenticator);
  //session.setDebug(true);
 }

 /**
  * 发送邮件
  *
  * @param recipient
  *            收件人邮箱地址
  * @param subject
  *            邮件主题
  * @param content
  *            邮件内容
  * @throws AddressException
  * @throws MessagingException
  */
 public void send(String addressor,String recipient, String subject, Object content)
   throws AddressException, MessagingException {
  // 创建mime类型邮件
  MimeMessage message = new MimeMessage(session);
  // 设置发信人
  message.setFrom(new InternetAddress(addressor));
  // 设置收件人
  message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
  // 设置主题
  message.setSubject(subject);
  // 设置邮件内容
  message.setContent(content.toString(), "text/html;charset=utf-8");
  // 发送
  Transport.send(message);
 }

 /**
  * 群发邮件
  *
  * @param recipients
  *            收件人们
  * @param subject
  *            主题
  * @param content
  *            内容
  * @throws AddressException
  * @throws MessagingException
  */
 public void send(List<String> recipients, String subject, Object content)
   throws AddressException, MessagingException {
  // 创建mime类型邮件
  MimeMessage message = new MimeMessage(session);
  // 设置发信人
  message.setFrom(new InternetAddress(authenticator.getUserName()));
  // 设置收件人们
  int num = recipients.size();
  InternetAddress[] addresses = new InternetAddress[num];
  for (int i = 0; i < num; i++) {
   addresses[i] = new InternetAddress(recipients.get(i));
  }
  message.setRecipients(RecipientType.TO, addresses);
  // 设置主题
  message.setSubject(subject);
  // 设置邮件内容
  message.setContent(content.toString(), "text/html;charset=utf-8");
  // 发送
  Transport.send(message);
 }
 /**
  * 发送邮件
  *
  * @param recipient
  *            收件人邮箱地址
  * @param mail
  *            邮件对象
  * @throws AddressException
  * @throws MessagingException
  */
 public void send(String addressor,String recipient, SimpleMail mail)
   throws AddressException, MessagingException {
  send(addressor,recipient, mail.getSubject(), mail.getContent());
 }

 /**
  * 群发邮件
  *
  * @param recipients
  *            收件人们
  * @param mail
  *            邮件对
  * @throws AddressException
  * @throws MessagingException
  */
 public void send(List<String> recipients, SimpleMail mail)
   throws AddressException, MessagingException {
  send(recipients, mail.getSubject(), mail.getContent());
 }
 
 
 /**
   * 接收邮件
   * pop3.163.com
   * 参数:服务器名称、收件人邮箱、密码
   */
  public void receive(String host,String name,String password)throws Exception{
      Properties  props   =   new  Properties();   
   //props.put("mail.pop3.host",host);
  
   Session session =Session.getInstance(props,null);//null 代表不需要验证
  // session.setDebug(true);
  // Provider  pro =session.getProvider("pop3");
   Store   store = session.getStore("pop3");//这两行代码很重要
   //建立连接 
   store.connect(host,name,password);
   Folder inbox = store.getFolder("INBOX");
   // 打开收件箱
   //Folder inbox = store.getDefaultFolder().getFolder("INBOX");
   inbox.open(Folder.READ_ONLY);//以只读方式打开
   // 得到邮箱中的e-mail总数
   int count = inbox.getMessageCount();
   // 将e-mail放在发件箱中,列表显示出来
   for (int i = 1; i <= count; i++) {
    Message message = inbox.getMessage(i);
    System.out.println("发件 人:" + message.getFrom());
    System.out.println("邮件主题:" + message.getSubject());
    System.out.println("邮件作者:" + message.getFrom()[0].toString());
    System.out.println("邮件内容:" + message.getContent());
    System.out.println("发送日期:" + message.getSentDate());
    System.out.println();
   }
   // 关闭收件箱和到邮件服务器的连接
   inbox.close(true);
   store.close();
 }
}

SendMail.java

package cn.com.vetc.survey.mail;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

import javax.mail.internet.MimeUtility;

import cn.com.vetc.survey.util.MessagePath;


public class SendMail {
 String msg = MessagePath.msgPath + "/param.ini";
 SimpleMailSender simpleMail = null;
 private String serverHost;
 private String serverPort;
 private String userEmail;
 private String uPassword;
 private String toEmail;
 private String toEmailShow;
 private String toPassword;
 private String replySubject;
 private String replyConent;
 Properties props = new Properties();
 
 public SendMail() {
  File f = new File(msg);
  FileInputStream is;
  try {
   is = new FileInputStream(f);
   props.load(is);
   serverPort = props.getProperty("SERVERPORT", "");
   userEmail = props.getProperty("USEREMAIL", "");
   uPassword = props.getProperty("UPASSWORD", "");
   toEmail = props.getProperty("TOEMAIL", "");
   toEmailShow = props.getProperty("TOEMAILSHOW","");
   toPassword = props.getProperty("TOPASSWORD","");
   serverHost = "smtp." + userEmail.split("@")[1];
   replySubject = props.getProperty("REPLYSUBJECT", "");
   replyConent = props.getProperty("REPLYCONTENT", "");
   
   toEmailShow = new String(toEmailShow.getBytes( "iso-8859-1"), "UTF-8");
   replySubject = new String(replySubject.getBytes( "iso-8859-1"), "UTF-8");
   replyConent  = new String(replyConent.getBytes( "iso-8859-1"), "UTF-8");

  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public boolean sendMail(String addressor,String subject, String content) {
  boolean flag =true;
  try {
   if(!"smtp.gmail.com".equals(serverHost.trim())){
    serverPort ="25";
   }else{
    serverPort ="465";
   }
   new SimpleMailSender(serverHost,userEmail,uPassword,serverPort).send(userEmail,toEmail, subject, content);
  } catch (Exception e) {
   flag = false;
   e.printStackTrace();
  }
  return flag;
 }
 
 /**
  * 后台开通用户时,给用户发送邮件
  * lwl
  * @param addressor
  * @param subject
  * @param content
  * @return
  */
 public boolean sendMailTo(String addressor,String subject, String content) {
  boolean flag =true;
  try {
   if(!"smtp.gmail.com".equals(serverHost.trim())){
    serverPort ="25";
   }else{
    serverPort ="465";
   }
   new SimpleMailSender(serverHost,userEmail,uPassword,serverPort).send(userEmail,addressor, subject, content);
  } catch (Exception e) {
   flag = false;
   e.printStackTrace();
  }
  return flag;
 }
 
 public boolean replyCustomer(String recipient, String contact){
  boolean flag =true;
  try {
   serverHost ="smtp." + toEmail.split("@")[1];
   if(!"smtp.gmail.com".equals(serverHost.trim())){
    serverPort ="25";
   }else{
    serverPort ="465";
   }
   String str= replyConent.replace("username", contact);
     new SimpleMailSender(serverHost,toEmail,toPassword,serverPort).send(MimeUtility.encodeText(toEmailShow)+" <"+toEmail+">", recipient, replySubject, str);
  } catch (Exception e) {
   flag =false;
   e.printStackTrace();
  }
  return flag;
 }
 
 public void receiveMail(){
  try {
   simpleMail.receive("pop3." + toEmail.split("@")[1], toEmail, toPassword);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }


}

SendMailServlet.java

 

package cn.com.vetc.survey.mail;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.mail.internet.MimeUtility;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SendMailServlet extends HttpServlet {

 SendMail sendMail = new SendMail();
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request,response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html; charset=utf-8");
  PrintWriter out = response.getWriter(); 

  String corporation=request.getParameter("corporation");  // 企业(个人)名称
  String contact=request.getParameter("contact");          // 联系人
  String email=request.getParameter("email");              // 联系电话
  String telephone=request.getParameter("telephone");      // 电子邮箱
  String remark = request.getParameter("remark");          // 备注
  //System.out.println("corporation:  "+corporation+"  contact:  "+contact+"  email:   "+email+"   telephone:  "+telephone+"  remark:  "+remark);
  Map<String,String> map = new HashMap<String,String>();
  map.put("subject", "申请试用调查系统");
  String str= corporation+" 申请试用:"+"<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+
      "【企业(个人)名称】: "+corporation+",  【联系人】: "+contact+ ",  【联系电话】:  "+telephone+", 【 Email地址】:   "+email+", 【备  注】:  "+remark+"。<br/><p align='right'>"+corporation+"</p>";
     try {
     boolean flag  = sendMail.sendMail("\""+MimeUtility.encodeText(corporation)+"\" <"+email+">", "申请使用调查系统",str);
     if(flag){
      sendMail.replyCustomer(email.trim(),contact);
     }
     out.print(flag);
     //response.sendRedirect("welcome.jsp");
  } catch (Exception e) {
   e.printStackTrace();
  }
  out.close();
 }

}

param.ini

#####################
# USEREMAIL、TOEMAIL 地址建议使用 163、126、sina、qq、gmail 的邮件地址,不能使用msn,因为msn发邮件的时候使用的不是smtp服务
#####################

# SERVERPORT:发送邮件时邮件服务器的端口号
SERVERPORT = 25
# USEREMAIL:邮件发送人的email地址 

USEREMAIL = genxiangliu@163.com
# UPASSWORD :邮件发送人的email密码 

UPASSWORD = xxxxxxxxxxxx

# TOEMAIL:邮件接收(发送)人的email密码
TOEMAIL = liugx.vqh@gmail.com
# TOPASSWORD :邮件接收(发送)人的email密码
TOPASSWORD =  xxxxxxxxxxx

# TOEMAILSHOW:回复用户邮件是显示Email地址的名称
TOEMAILSHOW =北京维深青鸿技术有限公司
# REPLYSUBJECT:回复用户邮件的subject
REPLYSUBJECT=申请使用回复
# REPLYCONTENT:回复用户邮件的content
REPLYCONTENT=尊敬的 username 您好:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优数手机面访式调查系统的注册资料已经收到,我们将在1个工作日内为您办理, 办理结果将发送至您的注册邮箱, 请注意查收!<br />非常感谢您的支持。<br/><p align='right'>北京维深青鸿技术有限公司</p>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值