admin管理员组

文章数量:1634853

今天项目有一个这样需求,用户忘记密码为了找回密码需要向用户的邮箱自动发送包含验证码的邮件,所以上网查询下java mail的实现。话不多说,具体看实现。

需要的jar包

这样用到的jar包是commons-email-1.4.jar,来自Apache。
下载地址:
http://commons.apache/proper/commons-email/download_email.cgi

我们打开网站点击下载commons-email-1.4.jar,它还提供了源码,需要的同学可以下载。

Mail实体类

package com.yc.wowo.entities;


/**
 * Mail属性实体
 * 
 * @author eden
 * 
 */
public class Mail{

    public static final String ENCODEING = "UTF-8";

    private String host = "smtp.163"; // 服务器地址 

    private String sender = "xuda27@163"; // 发件人的邮箱

    private String receiver = "xuda27@qq"; // 收件人的邮箱

    private String name = "达达软件团队"; // 发件人昵称

    private String username = "xuda27@163"; // 账号

    private String password = "客户端授权码"; // 客户端授权码密码

    private String subject = "[达达软件]找回您的帐户密码"; // 主题

    private String message = "你的验证码是:8988"; // 信息(支持HTML)

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getSender() {
        return sender;
    }

    public void setSender(String sender) {
        this.sender = sender;
    }

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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 String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

MailUtil类实现

import org.apachemons.mail.EmailException;
import org.apachemons.mail.HtmlEmail;

import com.yc.wowo.entities.Mail;

/**
 * 邮件发送工具实现类
 * 
 * @author eden
 */
public class MailUtil {

    public boolean send(Mail mail) {
        // 发送email
        HtmlEmail email = new HtmlEmail();
        try {
            // 这里是SMTP发送服务器的名字:163的如下:"smtp.163"
            email.setHostName(mail.getHost());
            // 字符编码集的设置
            email.setCharset(Mail.ENCODEING);
            // 收件人的邮箱
            email.addTo(mail.getReceiver());
            // 发送人的邮箱
            email.setFrom(mail.getSender(), mail.getName());
            // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
            email.setAuthentication(mail.getUsername(), mail.getPassword());
            // 要发送的邮件主题
            email.setSubject(mail.getSubject());
            // 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
            email.setMsg(mail.getMessage());
            // 发送
            email.send();
            return true;
        } catch (EmailException e) {
            e.printStackTrace();
            return false;
        }
    }

}

测试

用主方法测试

public static void main(String[] args) {  
        Mail mail = new Mail();   
        new MailUtil().send(mail);  
} 

结果:

期间遇到的错误

中途遇到了一个 org.apachemons.mail.EmailException: Sending the email to the following server failed : smtp.163:25 的错误。

上网查了下这个错误。原因:

  1. 是端口写错了,sendemail.setHostName(“smtp.163”);
  2. 是没有开通验证,
  3. 就是密码(授权码)错了

原来是我把密码用了邮箱的登录密码所以报了错,应该用授权码。

本文标签: 发送邮件电子邮箱JavaEmail