在java程序中实现发送邮件的功能

简介: 最近比较忙,在做一个人事管理系统的项目,在这项目需求中,需要一个发送邮件的功能。这个时候我们可以使用javamail的jar包来实现完美需要的功能,在这里简单的分享一个最基础的发邮件功能。 首先我们需要去下载两个jar包,smtp.jar和mailapi.jar,导入到自己的项目中应该就不用我说了吧,大家都是有经验的开发人员了。 public class Demo1 {

最近比较忙,在做一个人事管理系统的项目,在这项目需求中,需要一个发送邮件的功能。这个时候我们可以使用javamail的jar包来实现完美需要的功能,在这里简单的分享一个最基础的发邮件功能。

首先我们需要去下载两个jar包,smtp.jar和mailapi.jar,导入到自己的项目中应该就不用我说了吧,大家都是有经验的开发人员了微笑


public class Demo1 {

	
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		Session session = Session.getInstance(props);
		session.setDebug(true);
		
		Message msg = new MimeMessage(session);
		msg.setText("邮件测试");
		msg.setFrom(new InternetAddress("你的邮箱号"));
	
		Transport transport = session.getTransport();
		transport.connect("邮箱驱动", 25, "邮箱账号", "邮箱密码");
		transport.sendMessage(msg,
				new Address[]{new InternetAddress("对方的邮箱号")});

		transport.close();
	}

}
这样就可以实现一个很简单的发邮件的功能,至于其他的高级功能的话可以下载我提供的这个文件去看,有非常详细的演示代码!

我这里用的驱动是阿里云的,有的是可以使用使用搜狐或者163邮箱的也都是可以了!



如果想做一些其它的功能的话可以利用邮箱找回密码,大致就是在你建表的时候要加上一个时间标志以及过期时间。

package com.soq.card.web.action;

import java.sql.Timestamp;
import java.util.List;
import java.util.UUID;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.soq.card.biz.UserHander;
import com.soq.card.entity.Users;
import com.soq.card.tools.DBhepler;
import com.soq.card.tools.Mail;
import com.soq.card.tools.Md5;
import com.soq.card.web.base.BaseAction;

/**
 * @author javen
 * @Email zyw205@gmail.com
 * 
 */
public class PassEmailAction extends BaseAction {
    private Users users;
    private UserHander userHander;

    private String email;
    private String sid;
    private String userName;
    
    public String sendmail() {
        try {
            HibernateTemplate ht = this.getUserHander().getUsersDAO().getHibernateTemplate();
            SessionFactory factory = ht.getSessionFactory();
            Session session = factory.openSession();
            Criteria criteria = session.createCriteria(Users.class);
            criteria.add(Restrictions.eq("loginName", email));
            List<Users> list = criteria.list();
            if (list.size() > 0) {
                users=list.get(0);
                Mail mail = new Mail();

                String secretKey = UUID.randomUUID().toString(); // 密钥
                Timestamp outDate = new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000);// 30分钟后过期
                long date = outDate.getTime() / 1000 * 1000;// 忽略毫秒数  mySql 取出时间是忽略毫秒数的
                
                DBhepler bhepler=new DBhepler();
                String sql="update users set outDate=?,validataCode=? where loginName=?;";
                String str[] ={outDate+"",secretKey,users.getLoginName()};
                bhepler.AddU(sql, str);
                
                //this.getUserHander().getUsersDAO().getHibernateTemplate().update(users); // 保存到数据库
                System.out.println("   UserName>>>> "+users.getUserName());
                String key =users.getUserName() + "$" + date + "$" + secretKey;
                System.out.println(" key>>>"+key);
                String digitalSignature = Md5.md5(key);// 数字签名

                String path = this.getRequest().getContextPath();
                String basePath = this.getRequest().getScheme() + "://"
                        + this.getRequest().getServerName() + ":"
                        + this.getRequest().getServerPort() + path + "/";
                String resetPassHref = basePath + "checkLink?sid="
                        + digitalSignature +"&userName="+users.getUserName();
                String emailContent = "请勿回复本邮件.点击下面的链接,重设密码<br/><a href="
                        + resetPassHref + " target='_BLANK'>" + resetPassHref
                        + "</a>  或者    <a href=" + resetPassHref
                        + " target='_BLANK'>点击我重新设置密码</a>"
                        + "<br/>tips:本邮件超过30分钟,链接将会失效,需要重新申请'找回密码'" + key
                        + "\t" + digitalSignature;

                mail.setTo(email);
                mail.setFrom("XX");// 你的邮箱
                mail.setHost("smtp.163.com");
                mail.setUsername("XXX@163.com");// 用户
                mail.setPassword("CXXX");// 密码
                mail.setSubject("[二维码名片]找回您的账户密码");
                mail.setContent(emailContent);
                if (mail.sendMail()) {
                    System.out.println(" 发送成功");
                    this.getRequest().setAttribute("mesg", "重置密码邮件已经发送,请登陆邮箱进行重置!");
                    return "sendMail";
                }
            } else {
                this.getRequest().setAttribute("mesg", "用户名不存在,你不会忘记邮箱了吧?");
                return "noUser";
            }
        } catch (Exception e) {
            // TODO: handle exception 
            e.printStackTrace();
        }
        return null;
    }

    public String checkResetLink() {
        System.out.println("sid>>>" + sid);

        if (sid.equals("")  || userName.equals("")) {
            this.getRequest().setAttribute("mesg", "链接不完整,请重新生成");
            System.out.println(">>>>> null");
            return "error";
        }
        HibernateTemplate ht = this.getUserHander().getUsersDAO().getHibernateTemplate();
        SessionFactory factory = ht.getSessionFactory();
        Session session = factory.openSession();
        Criteria criteria = session.createCriteria(Users.class);
        criteria.add(Restrictions.eq("userName", userName));
        List<Users> list = criteria.list();
        if (list.size()>0) {
            users=list.get(0);
            
            Timestamp outDate = (Timestamp) users.getOutDate();
            System.out.println("outDate>>>"+outDate);
             if(outDate.getTime() <= System.currentTimeMillis()){ //表示已经过期
                 this.getRequest().setAttribute("mesg", "链接已经过期,请重新申请找回密码.");
                 System.out.println("时间 超时");
                 return "error";
             }
             
             String key = users.getUserName()+"$"+outDate.getTime()/1000*1000+"$"+users.getValidataCode();//数字签名
            
             System.out.println("key link》》"+key);
             String digitalSignature = Md5.md5(key);// 数字签名
             
             System.out.println("digitalSignature>>>>"+digitalSignature);
              if(!digitalSignature.equals(sid)) {
                  this.getRequest().setAttribute("mesg", "链接不正确,是否已经过期了?重新申请吧.");
                      System.out.println("标示不正确");
                    return "error";
              }else {
                //链接验证通过 转到修改密码页面
                this.getRequest().setAttribute("user", users);
                return "success";
            }
        }else {
            this.getRequest().setAttribute("mesg", "链接错误,无法找到匹配用户,请重新申请找回密码.");
            System.out.println("用户不存在");
            return "error";
        }
    }

    public Users getUsers() {
        return users;
    }

    public void setUsers(Users users) {
        this.users = users;
    }

    public UserHander getUserHander() {
        return userHander;
    }

    public void setUserHander(UserHander userHander) {
        this.userHander = userHander;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

}

下载地址: 点击打开链接http://download.csdn.net/detail/sdksdk0/9519659


目录
相关文章
|
24天前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
25 1
|
30天前
|
运维 监控 JavaScript
JAVA村卫生室、诊所云HIS系统源码 支持医保功能
运维运营分系统 1、系统运维:环境管理、应用管理、菜单管理、接口管理、任务管理、配置管理 2、综合监管:统计监管的医疗机构的综合信息,包括医疗业务量、人员配备量、支付分类占比等。 3、系统运营:机构管理、药品目录管理、用户管理、角色管理、字典管理、模板管理、消息管理、运营配置、售后服务、外部系统。
29 0
|
1月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
1月前
|
SQL Oracle Java
sql文件批处理程序-java桌面应用
sql文件批处理程序-java桌面应用
25 0
|
8天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
32 3
|
30天前
|
Java
使用java底层实现邮件的发送(含测试,源码)
使用java底层实现邮件的发送(含测试,源码)
9 0
|
23天前
|
Java
elasticsearch使用java程序添加删除修改
elasticsearch使用java程序添加删除修改
9 0
|
30天前
|
JSON 前端开发 Java
|
30天前
|
Java
java程序
re是java运行时的环境,包含jvm和运行时所需要的类库 jdk是java开的程序包,包含jre和开发人员使用的工具 jvm就是我们常说的java虚拟机,他是整个java实现跨平台的最核心 的部分,所有的java程序会首先被编译为.class的类文件,这种类文 件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统 相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释 给本地系统执行。 只有jvm还不能成class的执行,因为再解释class的时候jvm需要调用 解释所需要的类库lib,而jre包含lib类库。jvm屏蔽了与具体操作系 统平台相关的信息,使得java程
17 0
|
30天前
|
Java 数据安全/隐私保护 Windows
java实现邮件发送准备工作(前期配置)
java实现邮件发送准备工作(前期配置)
7 0