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/> "+
"【企业(个人)名称】: "+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/> 优数手机面访式调查系统的注册资料已经收到,我们将在1个工作日内为您办理, 办理结果将发送至您的注册邮箱, 请注意查收!<br />非常感谢您的支持。<br/><p align='right'>北京维深青鸿技术有限公司</p>