一:相关jar包介绍
在项目中实现邮件发送功能
主要为这俩个jar包实现发送邮件功能
前提概要
需要有一个邮箱账户,并且开启pop3/smtp功能
这里我以申请163账号为例
这里地址填一个自己记得住的
然后完成注册
然后打开你的设置开启这个功能,按照那个要求发送短信,会给你一个登录密码,
注意这个密码只会显示一次
如何使用以及示例代码
首先创建一个配置文件mail.properties将你的 邮箱,密码,邮箱服务的端口,等等写道配置类当中
#邮箱服务器地址
mail.smtp.host=smtp.163.com
#对应邮箱的服务端口
mail.smtp.port=25#开启认证
mail.smtp.auth=true#加密传输
mail.smtp.starttls.enable=true#你的邮箱
senderEmail=zbzlytop@163.com#对应的密码
senderPassword=*****************
相关邮件服务器对应的端口
网易163邮箱(mail.163.com)
新浪sina邮箱(mail.sina.com.cn)
腾讯Foxmail邮箱(mail.qq.com)
网易126邮箱(mail.126.com)
移动139邮箱(mail.10086.cn)
腾讯QQ邮箱(mail.qq.com)
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)
腾讯QQ企业邮箱(exmail.qq.com) :
POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)
谷歌Gmail邮箱(mail.google.com):
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)
创建一个邮件发送工具类EmailUtils
public class MailUtils {
public static void sendEmail(String email, String subject, String content){
//读取配置文件
InputStream resourceAsStream = MailUtils.class.getClassLoader().getResourceAsStream("mail.properties");
Properties properties = new Properties();
try {
properties.load(resourceAsStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
// 邮件发送者和收件人的电子邮件地址
String senderEmail =properties.getProperty("senderEmail");
String senderPassword = properties.getProperty("senderPassword");
// 创建身份验证对象
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(senderEmail, senderPassword);
}
};
// 创建会话
Session session = Session.getDefaultInstance(properties, authenticator);
try {
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(senderEmail));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
message.setSubject(subject);
message.setText(content);
// 发送邮件
Transport.send(message);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
System.out.println("邮件发送失败:" + e.getMessage());
}
}
}
写一个demo测试邮件功能
public class MailDemo {
public static void main(String[] args) {
MailUtils.sendEmail("3065400350@qq.com","ATM模拟系统通知邮箱","你好");
}
}
运行效果
成功发送邮件
二:项目中使用
创建对应的三层代码
dao
/**
*获取卡号对应的邮件
*/
public String getEmailByIcno(String icno){
String sql ="select email from user_email where icno = ?";
try {
return queryRunner.query(sql, new ScalarHandler<>(), icno);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
service
/**
* 获取email
* @param icno 卡号
* @return 邮箱地址
*/
String getEmailByIcno(String icno);
/**
* 获取email
*
* @param icno 卡号
* @return 邮箱地址
*/
@Override
public String getEmailByIcno(String icno) {
return userDao.getEmailByIcno(icno);
}
/**
* 模拟用户取款
*/
@WebServlet("/UserFetch")
public class UserFetchServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String fetchNum = req.getParameter("fetchNum");
String icno = null;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
}
double userBalance = userService.getUserBalance(icno);
int money=0;
if (fetchNum != null){
money=Integer.parseInt(fetchNum);
}
if (money==0){
req.getSession().setAttribute("error2","取款不能为0");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money>2000){
req.getSession().setAttribute("error2","取款不能大于2000");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money%50!=0){
req.getSession().setAttribute("error2","取款为50的倍数");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if(money>userBalance){
req.getSession().setAttribute("error2","取款金额不能大于剩余金额");
resp.sendRedirect("/changepage/UserStore.jsp");
}else {
boolean result=userService.FetchMoney(money,icno);
//保存交易记录
RunMessage runMessage = new RunMessage();
runMessage.setIcno(icno);
runMessage.setRm_date(new Date().toString());
runMessage.setRm_balance(-Double.parseDouble(String.valueOf(money)));
runMessage.setRm_rest(userService.getUserBalance(icno));
runMessage.setRm_currency("RMB");
runMessageService.addRunMessage(runMessage);
if (result){
String email = userService.getEmailByIcno(icno);
String content="您的卡号为:"+icno+" 的账户取款"+money+"\n 剩余金额为:"+userService.getUserBalance(icno);
MailUtils.sendEmail(email,"ATM模拟系统取款",content);
resp.sendRedirect("/UserSerch");
}else {
req.getSession().setAttribute("error2","取款失败");
resp.sendRedirect("/changepage/UserStore.jsp");
}
}
}
}
三:运行结果