电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
开发前准备
一、注册邮箱帐号:我这里使用的是163的邮箱,最好也是用163的邮箱,网站注册即可
二、开启smtp协议,以163为例
三、电子邮件协议:电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。
四、JavaMail:我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载。
开发过程
一、将javamail的jar包放到web-inf下的lib包里
二、新建短信发送的类,这里是sendEmail.java
三、编码,这里我将所有代码贴出来,你们可以直接复制,只需要修改其中参数即可package com.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.junit.Test;
import com.controller.SendCodeController;
/**
*
*
Title:SendEmail
*
Description: 邮件发送的工具类
* @author Fun言博客
* @date 2018年8月26日下午9:04:48
*/
public class SendEmail {
// 设置服务器
private static String KEY_SMTP = "mail.smtp.host";
private static String VALUE_SMTP = "smtp.163.com";
// 服务器验证
private static String KEY_PROPS = "mail.smtp.auth";
private static boolean VALUE_PROPS = true;
// 发件人用户名、密码
private String SEND_USER = "邮箱地址";
private String SEND_UNAME = "邮箱地址";
private String SEND_PWD = "邮箱登录密码";
// 建立会话
private MimeMessage message;
private Session s;
/*
* 初始化方法
*/
public void SendEmail() {
Properties props = System.getProperties();
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.ssl.enable","true");
props.setProperty(KEY_SMTP, VALUE_SMTP);
props.put(KEY_PROPS, "true");
props.put("mail.smtp.port", "465");
// props.put("mail.smtp.auth", "true");
s = Session.getDefaultInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(SEND_UNAME, SEND_PWD);
}});
s.setDebug(true);
message = new MimeMessage(s);
}
/**
* 发送邮件
*
* @param headName
* 邮件头文件名
* @param sendHtml
* 邮件内容
* @param receiveUser
* 收件人地址
* @throws Exception
*/
public void doSendHtmlEmail(String headName, String sendHtml,
String receiveUser) throws Exception {
// 发件人,设置邮件发送的人,这里是Fun言网,你们自行设置
InternetAddress from = new InternetAddress(SEND_USER,"Fun言网");
message.setFrom(from);
// 收件人
InternetAddress to = new InternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO, to);
// 邮件标题
message.setSubject(headName);
String content = sendHtml.toString();
// 邮件内容,也可以使纯文本"text/plain",这是是可以发送html代码的
message.setContent(content, "text/html;charset=UTF-8");
message.saveChanges();
Transport transport = s.getTransport("smtp");
// smtp验证,就是你用来发邮件的邮箱用户名密码
transport.connect(VALUE_SMTP, SEND_UNAME, SEND_PWD);
// 发送
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("send success!");
}
//邮件发送的测试方法,利用junit进行测试
@Test
public void ceshi(){
SendCodeController se = new SendCodeController();
try {
se.doSendHtmlEmail("尊敬的用户您好", "验证码为xxx112", "1243883776@qq.com");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Demo:发送验证码public void sendEmailCode()throws Exception{
String email=xxx@qq.com
//验证码生成
String yanzhengma=String.valueOf((int)((Math.random()*9+1)*100000));
//实例化发送邮件的类
SendEmail se=new SendEmail();
System.out.println("验证码为"+yanzhengma);
try {
//调用发送邮件的方法进行邮件发送,这里我们可以写html代码,分别填入发送人,内容,接收人
se.doSendHtmlEmail("Fun言网--创造你的快乐","
您注册的邮箱验证码是"+yanzhengma+"
如果您并未发过此请求,则可能是因为其他用户误输入了您的电子邮件地址而使您收到这封邮件,那么您可以放心的忽略此邮件,无需进一步采取任何操作。
Fun言
除非您是收件人或负责向收件人转呈的人,本电子邮件及其附件严禁散发和复制。如果您误收此电子邮件,请删除此电子邮件及其附件并告知我们。电子邮件不是绝对安全的,因此Fun言不承担本电子邮件所含信息的法律责任,其中的观点和意见仅代表发出者本人,除非特别声明,否则不必然代表Fun言。
",email);} catch (Exception e) {
// TODO: handle exception
}
message.setMessage("发送成功");
//发送成功后放到session中
session.setAttribute("code", yanzhengma);
return message;
}
这样利用java实现邮件发送的功能就完成了,有不懂的可以在下方评论。
你还没有登录,请先使用 QQ登录 或 注册!
文章评论
发表评论