在实际项目中会遇到需要使用邮件注册,或者是使用邮件找回密码等操作,需要使用到邮件发送功能。

其实邮件的发送主要是依赖于邮件协议,只要能实现邮件协议,那么发送邮件其实还是很容易的。这一步java类库已经帮我们封装好了,所以对于我们来说,我们要做的只要把参数填上,剩下的就很简单了。下面附上发送邮件几个工具类,然后使用163邮箱进行发送的测试类。

package com.ssm.util;

import java.util.Properties;

/**
* 发送邮件需要使用的基本信息
* @author XX
*
*/
public class MailSenderInfo
{
private String mailServerHost;//发送邮件的服务器的IP
private String mailServerPort = "25";//发送邮件的服务器的端口
private String fromAddress;// 邮件发送者的地址
private String toAddress;// 邮件接收者的地址
private String username;// 登陆邮件发送服务器的用户名
private String password;// 登陆邮件发送服务器的密码
private boolean validate = false;// 是否需要身份验证
private String subject;// 邮件主题
private String content;// 邮件的文本内容
private String[] attachFileNames;// 邮件附件的文件名 /**
* 获得邮件会话属性
*/
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
} /**
* 发送邮件的服务器的IP
*/
public String getMailServerHost() {
return mailServerHost;
} /**
* 发送邮件的服务器的IP
*/
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
} /**
* 发送邮件的服务器的端口
*/
public String getMailServerPort() {
return mailServerPort;
} /**
* 发送邮件的服务器的端口
*/
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
} /**
* 是否需要身份验证
*/
public boolean isValidate() {
return validate;
} /**
* 是否需要身份验证
*/
public void setValidate(boolean validate) {
this.validate = validate;
} /**
* 邮件附件的文件名
*/
public String[] getAttachFileNames() {
return attachFileNames;
} /**
* 邮件附件的文件名
*/
public void setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
} /**
* 邮件发送者的地址
*/
public String getFromAddress() {
return fromAddress;
} /**
* 邮件发送者的地址
*/
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
} /**
* 登陆邮件发送服务器的密码
*/
public String getPassword() {
return password;
} /**
* 登陆邮件发送服务器的密码
*/
public void setPassword(String password) {
this.password = password;
} /**
* 邮件接收者的地址
*/
public String getToAddress() {
return toAddress;
} /**
* 邮件接收者的地址
*/
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
} /**
* 登陆邮件发送服务器的用户名
*/
public String getUsername() {
return username;
} /**
* 登陆邮件发送服务器的用户名
*/
public void setUsername(String username) {
this.username = username;
} /**
* 邮件主题
*/
public String getSubject() {
return subject;
} /**
* 邮件主题
*/
public void setSubject(String subject) {
this.subject = subject;
} /**
* 邮件的文本内容
*/
public String getContent() {
return content;
} /**
* 邮件的文本内容
*/
public void setContent(String textContent) {
this.content = textContent;
}
}
package com.ssm.util;

import javax.mail.*;

/**
* 邮箱用户信息加密认证类
* @author XX
*
*/
public class MyAuthenticator extends Authenticator { String username = null;//用户名
String password = null;//密码 public MyAuthenticator() {
} public MyAuthenticator(String username, String password) {
this.username = username;
this.password = password;
} protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
package com.ssm.util;

import java.util.Date;
import java.util.Properties; import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart; /**
* 简单邮件发送,两种方式
* @author XX
*
*/
public class SimpleMailSender { /**
* 以文本格式发送邮件
* @param mailInfo 待发送的邮件的信息
* @return 发送成功返回true;失败返回false
*/
public boolean sendTextMail(MailSenderInfo mailInfo)
{
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate())
{
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUsername(),mailInfo.getPassword());
} // 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
} /**
* 以HTML格式发送邮件
* @param mailInfo 待发送的邮件的信息
* @return 发送成功返回true;失败返回false
*/
public boolean sendHtmlMail(MailSenderInfo mailInfo)
{
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate())
{
authenticator = new MyAuthenticator(mailInfo.getUsername(),mailInfo.getPassword());
} // 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator); try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date()); // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html); /*//设置信件的附件(用本地上的文件作为附件)******************暂时进行使用所以注释
html = new MimeBodyPart();
FileDataSource fds = new FileDataSource("E:\\123.doc");
DataHandler dh = new DataHandler(fds);
html.setFileName("javamail.doc");
html.setDataHandler(dh);
mainPart.addBodyPart(html);*/ // 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
mailMessage.saveChanges(); // 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}
package com.ssm.util;

/**
* 发送邮件测试类
* @author XX
*
*/
public class SendMail { public static void main(String[] args) {
SendMail.send_163();
} // 163邮箱
public static void send_163()
{
//MailSenderInfo用于输入发送人的信息,方便以后如果用多个,或者不同的邮箱进行发送
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com"); //163的规定地址
mailInfo.setMailServerPort("25"); //邮件协议规定端口号
mailInfo.setValidate(true); //需要身份认证 /*下面的信息需要根据实际进行修改*/
mailInfo.setUsername("11111111@163.com"); // 实际发送者
mailInfo.setPassword("11111111"); // 您的邮箱密码
mailInfo.setFromAddress("111111111@163.com"); // 设置发送人邮箱地址
mailInfo.setToAddress("1111111111@qq.com"); // 设置接受者邮箱地址
mailInfo.setSubject("标题");
mailInfo.setContent("内容<h1>http://www.baidu.com</h1>"); SimpleMailSender sms = new SimpleMailSender();
sms.sendTextMail(mailInfo); // 发送文体格式
sms.sendHtmlMail(mailInfo); // 发送html格式
}
}

使用javamail-1.4.4这个版本的jar包即可。

java下发电子邮件demo的更多相关文章

  1. JAVA长连接demo

    http://blog.csdn.net/caomiao2006/article/details/38830475 JAVA长连接demo 2014-08-25 23:20 4767人阅读 评论(2) ...

  2. 启动servlet报错:The servlets named [DemoServlet] and [main.java.com.wlf.demo.servlet.DemoServlet] are both mapped to the url-pattern [/hello] which is not permitted

    先看具体错误日志: [2019-04-26 09:29:25,484] Artifact demo-servlet:war: Artifact is being deployed, please wa ...

  3. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  4. Java反射机制demo(六)—获得并操作一个类的属性

    Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...

  5. Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  6. Java反射机制demo(四)—获取一个类的父类和实现的接口

    Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...

  7. Java反射机制demo(三)—获取类中的构造函数

    Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...

  8. Java反射机制demo(二)—通过Class实例化任意类的对象

    Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...

  9. Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

随机推荐

  1. Announcement

    本来是习惯把每天的内容写在一个txt里. 似乎不符合要求.无论格式还是内容.于是转战blog. 事实上.有专业课学习加上马上考四级以及下学期可能的专业调整.此学期时间紧张. 能完成日常作业并掌握周课内 ...

  2. hashMap、hashTable、treeMap的区别

    1.hashTable是线程安全的.hashMap不是线程安全的 hashmap 线程不安全 允许有null的键和值 效率高一点. 方法不是Synchronize的要提供外同步 有containsva ...

  3. redis持久化探究

    redis支持两种持久化方式,一种是RDB方式,另一种是AOF方式.redis3.0windows版本默认关闭AOF(appendonly no),而开启RDB,当达到一定条件时,redis就会将内存 ...

  4. 正则表达式判断ip地址

    html: <div class="configuration"><form action="" name="myformcon&q ...

  5. 【转载】将绿色版Tomcat服务添加到系统服务并设为开机运行

    转自: http://www.cnblogs.com/lan0725/archive/2009/11/04/1873859.html   运行cmd打开控制台,进入Tomat目录/bin文件夹,输入如 ...

  6. 第三十九节,python内置全局变量

    vars()查看内置全局变量 以字典方式返回内置全局变量 #!/usr/bin/env python # -*- coding:utf8 -*- print(vars()) #输出 # {'__bui ...

  7. 微信接口开发1--向微信发送请求--获取access_token

    //随便放置一个php文件在服务器上.执行该方法--调用模拟get提交---到微信-->获得微信返回的access_token 不建议自己编写模拟get提交方法. 建议直接导入微信框架LaneW ...

  8. 一个Cmake的例子

    命令查询列表:http://www.cmake.org/cmake/help/v3.2/manual/cmake-commands.7.html # # Official dependency num ...

  9. As3.0 类的【枚举】

    As3.0 类的枚举   “枚举”是您创建的一些自定义数据类型,用于封装一小组值.ActionScript 3.0 并不支持具体的枚举工具,这与 C++ 使用 enum 关键字或 Java 使用 En ...

  10. UIWebView是什么

    UIWebView类是用来显示网络内容.要使用它,可以简单的创造一个UIWebView对象,放置到窗口上,并且发送一个指向网络内容的请求.通过这个类,可以控制网页历史的前进後退,也可以通过程序去控制网 ...