用Java实现电子邮箱email发送邮件

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

需要的jar包

这样用到的jar包是commons-email-1.4.jar,来自Apache。
下载地址:
http://commons.apache.org/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.com"; // 服务器地址 

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

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

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

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

    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.apache.commons.mail.EmailException;
import org.apache.commons.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.com"
            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.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:25 的错误。

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

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

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

这里写图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值