java实现发送邮件的功能:首先需要导入mail.jar;

然后需要写发送方法:

1、邮箱发送封装工具类:

package com.wxjiameng.utils;

import java.util.Date;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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;
import javax.mail.internet.MimeUtility; import org.apache.log4j.Logger; /**
*
*
* @类编号:
* @类名称:EmailsUtils
* @内容摘要: 发送邮件
* @author:鹿伟伟
* @创建日期:2016年4月25日 下午6:06:15
* @修改人:
* @修改日期:
* @修改描述:简单描述修改的内容
* @version 1.0.0
*
*/ public class EmailsUtils {
public static Logger logger = Logger.getLogger(EmailsUtils.class);
//Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
private Multipart mp = new MimeMultipart();
private final String CHAR_SET = "UTF-8"; /**
*
* @Description: 发送邮件
* @param EmailParaForm 发件人等发送邮件参数
* @return
* @author: YuPeng
* @date 2012-5-25 下午5:13:36
*/
public boolean SendEmails(EmailParaForm emailParaForm){
boolean isSucc = false;
if (emailParaForm == null){
return isSucc;
}
try{
//JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.
//Properties对象获取诸如邮件服务器、用户名、密码等信息,以及其他可在整个应用程序中 共享的信息。
Properties props=new Properties();//也可用Properties props = System.getProperties();
props.put("mail.smtp.host",emailParaForm.getStmpHost());//存储发送邮件服务器的信息
props.put("mail.smtp.port", "" + emailParaForm.getTport()); // 端口号
props.put("mail.transport.protocol",emailParaForm.getProtocol());
props.put("mail.smtp.auth",emailParaForm.getNeedAuth());//同时通过验证
if (null != emailParaForm.getAgentIp() && emailParaForm.getAgentIp().length() != 0 && !emailParaForm.getAgentIp().equals("0")) {
props.put("mail.agentIp", emailParaForm.getAgentIp());
} if (null != emailParaForm.getAgentPort() && emailParaForm.getAgentPort().length() != 0 && !emailParaForm.getAgentPort().equals("0")) {
props.put("mail.agentPort", emailParaForm.getAgentPort());
} //方法二:(如果是在weblogin配置JavaMail:则需指定JNDI名检索
//Context ctx=new InitialContext();
//Session s=(Session)ctx.lookup("MailSession");
//Message msg=new MimeMessage(s); //这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。
//Session类定义全局和每个用户的与邮件相关的属性。这此属性说明了客房机和服务器如何交流信息。
//Authenticator也是一个抽象类,你需要自己编写子类已备应用。 Session s = Session.getInstance(props,null);//根据属性新建一个邮件会话,null参数是一种Authenticator(验证程序) 对象
String isDebug = emailParaForm.getIsDebug();
if (isDebug != null && isDebug.trim().equalsIgnoreCase("true")){
s.setDebug(true);//设置调试标志,要查看经过邮件服务器邮件命令,可以用该方法
}
// 一旦创建了自己的Session对象,就是该去创建要发送的消息的 时候了。这时就要用到消息类型(MimeMessage是其中一种类型)。
// Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。
// Message类表示单个邮件消息,它的属性包括类型,地址信息和所定义的目录结构。 Message message=new MimeMessage(s);//由邮件会话新建一个消息对象 //message.setContent("hello","test/plain");//设置消息的内容类型,如果发送的格式有HTML格式就必须设置,
//message.setText("Hello");//发送一般文本格式的消息 //设置邮件,一旦您创建了 Session 和 Message,并将内容填入消息后,就可以用Address确定信件地址了。
//如果想让一个名字出现在电子邮件地址后,也可以将其传递给构造器:
//Address from=new InternetAddress("xmqds@21cn.com","qdison");//发件人的邮件地址 Address from=new InternetAddress(emailParaForm.getTfrom());//发件人的邮件地址
message.setFrom(from);//设置发件人 Address to=new InternetAddress(emailParaForm.getTto());//收件人的邮件地址
message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO,还有3种预定义类型如下: //Message.RecipientType.TO  收件人
//Message.RecipientType.CC  抄送
//Message.RecipientType.BCC  暗送
message.setSubject(emailParaForm.getTtitle());//设置主题
message.setSentDate(new Date());//设置发信时间
setBody(emailParaForm.getTcontent()); //String fileAttachment = "C:\\测试\\中国.txt";
//添加附件
String fileAttachments = emailParaForm.getFileAttachments();
if(null!=fileAttachments){
String[] fileAttArr = fileAttachments.split(";");
for (int i = 0; i < fileAttArr.length; i++){
String fileAtt = fileAttArr[i];
addFileAffix(fileAtt);
}
} message.setContent(mp);
message.saveChanges();//存储邮件信息
// Transport 是用来发送信息的,
// 用于邮件的收发打操作。
Transport transport=s.getTransport(emailParaForm.getProtocol());
transport.connect(emailParaForm.getStmpHost(),emailParaForm.getUserName(),emailParaForm.getPassword());//以smtp方式登录邮箱
transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
transport.close(); isSucc = true;;
} catch(MessagingException e){
logger.error(e);
e.printStackTrace();
}
return isSucc;
} /**
* 邮件添加附件
*
* @param filePath 包括路径名的完整本地文件名
* @return boolean
*/
public boolean addFileAffix(String filePath) {
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filePath);
bp.setDataHandler(new DataHandler(fileds));
String fileNm = fileds.getName();
bp.setFileName(MimeUtility.encodeText(fileNm));
mp.addBodyPart(bp);
return true;
}
catch (Exception e) {
logger.error(e);
System.err.println("Affix" + filePath + "accour error" + e);
return false;
}
} /**
* 设置邮件内容
*
* @param body 邮件内容
* @return boolean
*/
public boolean setBody(String body) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent("" + body, "text/html;charset=" + CHAR_SET);
mp.addBodyPart(bp);
return true;
} catch (Exception e) {
logger.error(e);
System.err.println("set mail body is error" + e);
return false;
}
} /**
* 发送邮件
* @param receiveUser 接收人
* @param title 标题
* @param content 内容
* 返回true则发送成功,false发送失败
* @return
*/
public boolean send(String receiveUser,String title,String content){
boolean isSucc = false;
EmailParaForm spForm = new EmailParaForm();
spForm.setId("FFFFFF");
spForm.setTfrom("***@163.com"); // 发出者邮箱
spForm.setStmpHost("smtp.163.com"); // 邮箱类型
spForm.setNeedAuth("true");//是否需要认证
spForm.setIsDebug("false"); //调试
spForm.setProtocol("smtp"); //协议
spForm.setUserName("***@163.com");//用户名
spForm.setPassword("****");//密码
spForm.setTport("25");//端口。默认发出
spForm.setTto(receiveUser);
spForm.setTcontent(content);
spForm.setTtitle(title);
String formPass = spForm.getPassword();
if (formPass != null ){
isSucc=SendEmails(spForm);
}
return isSucc;
} public static void main(String[] args){
EmailsUtils e = new EmailsUtils();
e.send("**@qq.com", "维基百科", "自由的百科全书:维基百科是一个内容自由、任何人都能参与、并有多种语言的百科全书协作计划...");
}
}

2、邮箱发送信息实体类:

package com.wxjiameng.utils;

public class EmailParaForm {
//编号
private String id;
//发件人
private String tfrom;
//收件人,以分号分隔
private String tto;
//主题
private String ttitle;
//内容
private String tcontent;
//发送邮件服务器
private String stmpHost;
//接受邮件服务器
private String popHost;
//协议
private String protocol;
//是否需要认证
private String needAuth;
//验证类名
//private String authClassNm;
private String isDebug;
//抄送,以分号分隔
private String tcc;
//暗送,以分号分隔
private String tbcc;
//多附件以分号分隔
private String fileAttachments;
//用户名
private String userName;
//密码
private String password;
//代理服务器IP
private String agentIp;
//代理服务器端口号
private String agentPort;
//weblogin配置JavaMail:则需指定JNDI名检索
private String jndiNm;
//接收协议
private String pprotocol;
//发送邮件服务器端口
private String tport;
//接收邮件服务器端口
private String pport; //set get方法 }

在使用的时候会出现以下异常:



需要检查发送者的邮箱是否开通pop3/smtp权限,开通后即可发送成功;不明白可以私信给我,相互学习!

java实现发送邮件工具的更多相关文章

  1. java HtmlEmail发送邮件工具类

    package com.sh.xrsite.common.utils; import java.io.File; import java.util.HashMap; import java.util. ...

  2. JAVA发送邮件工具类

    import java.util.Date;import java.util.Properties; import javax.mail.BodyPart;import javax.mail.Mess ...

  3. Jmail发送邮件工具类

    好久没更新博客了,实在是拖延症严重啊,好可怕,先更新个工具类吧,之前写的发送邮件的小工具,话不多说上代码 import lombok.extern.slf4j.Slf4j; import java.u ...

  4. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  5. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  6. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  7. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  8. java keytool证书工具使用小结

    java keytool证书工具使用小结 在Security编程中,有几种典型的密码交换信息文件格式: DER-encoded certificate: .cer, .crt    PEM-encod ...

  9. [刘阳Java]_避开环境配置快速的使用Java的开发工具_第5讲

    我们一般学习Java都应该遵循通过系统的命令工具来编译Java程序,然后对编译好Java程序进行运行,这个是非常好的习惯.但是随着后期学习Java技术的深入我们也得像Java的IDE工具屈服.所以,可 ...

随机推荐

  1. C#读写.ini文件

    转载来源: http://blog.csdn.net/source0573/article/details/49668079 https://www.cnblogs.com/wang726zq/arc ...

  2. python中报中文编码异常,Non-ASCII ,but no encoding declared

    异常信息: SyntaxError: Non-ASCII character '\xe5' in file a.py on line 9, but no encoding declared; see ...

  3. Qt弹出消息对话框

    添加头文件 #include <QMessageBox> if(ui->lineEditXStart->text().isEmpty()) //判断lineedit输入内容是否 ...

  4. zabbix的配置

    一.网络自动发现: 1.zabbix的网络自动发现是一个非常强大的功能,该功能可以完成以下工作. a.快速发现并添加主机. b.简单的管理. c.随着环境的改变而快速搭建监控系统. 2.网络发现基于以 ...

  5. css 雪碧图

    CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问 该页面时,载入的图片就不会像以前那样一幅一幅地 ...

  6. 8、非root权限下安装perl以及perl模块

    转载:http://www.cnblogs.com/nkwy2012/p/6418669.html 转载自http://www.zilhua.com 在本博客中,所有的软件安装都在服务器上,且无roo ...

  7. hdu1086

    #include <iostream>#include <stdio.h>#include <string.h>#include <stack>#inc ...

  8. Java实现WC基本功能

    GitHub仓库:https://github.com/douyazai/WCbase 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...

  9. Android 设计模式情景分析——观察者模式

    观察者模式是一种使用频率非常高的模式,有时也被称作发布/订阅模式,属于行为型模式,它最常用的是 GUI 系统.订阅——发布系统,它一个重要作用就是解耦,使得它们之间的依赖性更小.观察者模式定义了对象间 ...

  10. nginx设置成开机自动启动服务

    1.nginx的安装目录 /usr/local/nginx 启动nginx cd /usr/local/nginx/sbin./nginx 更改配置重启nginxcd /usr/local/nginx ...