sponsored links

java基于javamail的验证码邮件发送

java基于javamail的邮件发送

一:环境准备

1:jaavmail的jar包 下载地址https://github.com/javaee/javamail/releases 如果无法连接上github可以在这里下载

2:163服务器的开启并得到授权码

打开网易邮箱点击如图所示的设置

java基于javamail的验证码邮件发送

点击POP3/SMTP/IMAP

java基于javamail的验证码邮件发送

开启邮件发送服务

java基于javamail的验证码邮件发送

在邮件中心点击左侧的客户端授权密码

java基于javamail的验证码邮件发送

获得客户端授权密码(点击开启会给你一个授权码,记住一会有用)

java基于javamail的验证码邮件发送

到这里为止,环境和工具包都弄好了,接下来就是开发了。

二:开发邮件发送

1:在eclipse(这里选择的IDE是eclipse,其他的也可以)里面建一个java项目

java基于javamail的验证码邮件发送

2:将javamail这个jar包导进去(这里直接把jar包放到src下,然后右键--》build path--》add to build path就可以了)如果是maven工程的话就把下面这段代码加到你的pom文件皆可以了

 <dependency>
     <groupId>com.sun.mail</groupId>
     <artifactId>javax.mail</artifactId>
     <version>1.6.0</version>
 </dependency>

java基于javamail的验证码邮件发送

3:接下来就是代码的编写了(发邮件,首先你肯定要创建一封邮件)在src下建一个EMcreate的类(将下面的xxxx改成相应的邮箱和文字)

package com;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

public class EMcreate {

    //account是发件人的邮箱
    //password就是刚才你得到的那个授权码
    //code是你要发送的验证码
    public static MimeMessage createEmail(final String account,final String password,final String code) throws Exception {
        Properties config = new Properties();
        Session session = Session.getInstance(config,new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(account, password);
            }
        });
        //1 创建邮件发送对象
        MimeMessage m = new MimeMessage(session);
        //2 设置发件人xxxxx是邮件说明
        Address from = new InternetAddress(account,"xxxxxxx","utf-8");
        m.setFrom(from);
        //3 设置收件人xxxx是收件人的地址
        m.setRecipient(RecipientType.TO, new InternetAddress("xxxxxxx@xxx.com"));
        //4 设置抄送人
        //todo
        //5 设置密送人
        //todo
        //6 设置主题
        m.setSubject("code", "utf-8");
        //7 设置正文
        m.setContent("your Authentication code is"+code, "text/plain;charset=utf-8");
        //8 设置邮件发送时间
        m.setSentDate(new Date());
        //9 确认操作
        m.saveChanges();
        return m;
    }

}

4:再写一个生成验证码的java类(这里是生成六位验证码)

package com;

public class Code {

    public static void getCode() {
        String str = "";
        for (int i = 0; i < 6; i++) {
            str += (int)Math.floor(Math.random()*10);
        }
        System.out.println(str);
    }

}

5:接下来就是最后一步发邮件了

package com;

import java.util.Properties;

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;

public class EMsend {

    public static void main(String[] args) throws Exception {
        String account = "你的163邮箱";
        String password = "你刚刚获得的授权码";
        MimeMessage m = EMcreate.createEmail(account, password, Code.getCode());
        Session session = m.getSession();
        session.setDebug(true);
        Properties config = session.getProperties();
        config.put("mail.transport.protocol", "smtp");
        config.put("mail.smtp.host", "smtp.163.com");
        //config.put("mail.smtp.port", "25");
        config.put("mail.smtp.auth", "true");
        //config.put("mail.smtp.ssl.enable", "false");
        Transport.send(m);
    }

}

6:运行上面这个程序,我的邮箱就接收到这封邮件了

java基于javamail的验证码邮件发送

7:看一下console的debug信息,也是成功发送的(这里特别注意,你的邮件内容最好是全英文或者繁体字,否则163可能认为你是一封垃圾邮件,然后会出现一个554的错误)

8:这个源码可以去这里下载