- 浏览: 63721 次
- 性别:
- 来自: 上海
文章分类
最新评论
最近公司需要写一个通用一点的邮件发送功能,暂时主要是完成通用的验证后给顾客发送一个连接之类的纯文本消息,所以自己在java官网巴拉巴拉看了一通,瞎整了一个简单的java邮件发送功能,进过验证,功能简单但是效果还行,通过qq,163,outlook等邮箱服务器互发都ok,主要是,可以一对多发送。jar包就是很简单的javax.mail.jar
package javamail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailConnectException;
public class SendMailImpl implements SendMail{
public SendMailResult sendMail(String host,int port,String username,
String password,String subject,String contentType,
Date date,String header,Object contents,Address from,InternetAddress[] toUsers){
SendMailResult result = new SendMailResult();
if(isValidInput(result, host, username, port,from,toUsers))
{
Properties prop = mailConfig(true,true,host,username,port);
Session session = Session.getInstance(prop); //根据prop配置创建一个新的session对象
try {
Transport transport = session.getTransport();
transport.connect(host,port,username,password); //建立和邮箱服务器的链接
MimeMessage message = createMessage(session, from, toUsers, header, subject, contents, contentType, date);
transport.sendMessage(message,toUsers); //发送邮件
transport.close();
} catch (NoSuchProviderException e) {
result.setReturnCode(7);
// e.printStackTrace();
return result;
}catch (MessagingException e) {
System.out.println("host:"+host+" port:" +port+" username:"+username+" password:"+password);
if(e instanceof MailConnectException){
result.setReturnCode(6);
}else if(e instanceof AuthenticationFailedException){
result.setReturnCode(8);
}
else
result.setReturnCode(7);
// e.printStackTrace();
return result;
}
return result;
}else{
return result;
}
}
/**
* toUsers 必须是逗号隔开的String字符串
* @param toUsers
* @param date
* @param header
* @param subject
* @param contents
* @return
*/
public SendMailResult sendMailWithDefaultSetting(String toUsers,Date date,String header,String subject,String contents)
{
SendMailResult result =new SendMailResult();
if(toUsers!=null && toUsers.length()>0)
{
try{
InternetAddress[] to=InternetAddress.parse(toUsers);
result = sendMail(SendMail.HOST, SendMail.PORT, SendMail.SYSTEM_USER,SendMail.SYSTEM_USER_PASSWORD,
subject, SendMail.CONTENT_TYPE,date, header, contents, new InternetAddress(SendMail.SYSTEM_USER_ADDRESS),to);
}catch(AddressException e){
result.setReturnCode(5);
}
}
return result;
}
/**
* 邮箱发送方初始配置信息
* @param isDebug
* @param isStrict
* @param hostAddress
* @param username
* @param port
* @return
*/
private Properties mailConfig(boolean isDebug,boolean isStrict,String hostAddress,String username,int port){
Properties prop = new Properties();
String debug = (isDebug)?"true":"false";
String strict = (isStrict)?"true":"false";
hostAddress=(hostAddress==null)? SendMail.HOST : hostAddress;
String protocol=SendMail.DEFAULT_PROTOCOL; //设置发送邮件协议为smtp
port=(port<=0)? SendMail.PORT : port;
username=(hostAddress==null)? SendMail.SYSTEM_USER:username;
prop.setProperty("mail.debug",debug); //是否开启调试
prop.setProperty("mail.mime.address.strict", strict); //邮箱地址是否严格检查
prop.setProperty("mail.protocol.host", hostAddress); //设置邮箱发送服务器地址
prop.setProperty("mail.transport.protocol", protocol); //设置邮箱服务器发送协议smtp
prop.setProperty("mail.protocol.user", username); //设置发送方
prop.setProperty("mail.protocol.port", String.valueOf(port)); //设置邮箱服务器发送端口
return prop;
}
/**
* 构成邮件体的通用方法
* @param session
* @param from
* @param toUsers
* @param header
* @param subject
* @param contents
* @param contentType
* @param sendDate
* @return
*/
private MimeMessage createMessage(Session session,Address from,InternetAddress[] toUsers,String header,String subject,Object contents,String contentType,Date sendDate){
MimeMessage message = new MimeMessage(session); //创建发送邮件体
try {
message.addFrom(new Address[]{from});
message.addHeader(header, header);
message.addRecipients(Message.RecipientType.TO, toUsers);
message.setSubject(subject);
message.setContent(contents, contentType);
if(sendDate.before(new Date())) //如果发送时间为小于当前时间,设为立即时间发送
sendDate = new Date();
message.setSentDate(sendDate); //设定发送时间
} catch (MessagingException e) {
e.printStackTrace();
}
return message;
}
private boolean isValidInput(SendMailResult result,String host,String username,int port,Address from,Address[] to){
if(host==null||host.equals("")){
result.setReturnCode(1);
result.setReturnMessage("server adress missing !");
return false;
}else if(username==null||username.equals(""))
{
result.setReturnCode(2);
return false;
}else if(port<=0)
{
result.setReturnCode(3);
return false;
}else if(from==null){
result.setReturnCode(4);
return false;
}else if(to==null||to.length<1){
result.setReturnCode(5);
return false;
}
return true;
}
public static void main(String[] args) throws Exception {
SendMailResult result = new SendMailImpl().sendMail("mail.xx.com",25, "username","password","java mail test!","text/plain; charset=utf-8",
new Date(),"java mail test!","http://www.baidu.com",new InternetAddress("xx@xx.com"),new InternetAddress[]{new InternetAddress("xx@xx.com"),new InternetAddress("xx@xx.com")});
System.out.println(result);
Thread.sleep(1000);
result = new SendMailImpl().sendMailWithDefaultSetting("xx@xx.com,xx@xx.com,xx@xx.com", new Date(), "", "javamail test!!", "hello 我用自己的程序给你发邮件了咯!");
System.out.println(result);
}
}
package javamail;
import java.util.Date;
import javax.mail.Address;
import javax.mail.internet.InternetAddress;
public interface SendMail {
public static String HOST="xx";
public static String SYSTEM_USER="xx";
public static String SYSTEM_USER_ADDRESS="xx@xx.com";
public static String SYSTEM_USER_PASSWORD="xx";
public static String DEFAULT_ENCODING="base64";
public static String DEFAULT_CHARSET="UTF-8";
public static String DEFAULT_PROTOCOL="smtp";
public static boolean SMTP_AUTH = false;
public static boolean ISDEBUG=false;
public static int PORT=25; //不同邮箱端口不同
public static String CONTENT_TYPE="text/plain;charset=utf-8";
/**
* 这个方法包含发送邮件需要配置的所有参数(暂时发送邮件功能不包含附件)
* @param host
* @param port
* @param username
* @param password
* @param subject
* @param contentType
* @param date
* @param header
* @param contents
* @param from
* @param toUsers
* @return
*/
public SendMailResult sendMail(String host,int port,String username,
String password,String subject,String contentType,
Date date,String header,Object contents,Address from,InternetAddress[] toUsers);
/**
* 这个方法根据默认系统配置发送邮件给接收方
* @param toUsers
* @param date
* @param header
* @param subject
* @param contents
* @return
*/
public SendMailResult sendMailWithDefaultSetting(String toUsers,Date date,String header,String subject,String contents);
}
package javamail;
public class SendMailResult {
/**
* returncode 1:服务器地址不存在 ; 2 发送方用户名不存在 3 邮件服务器端口设置不存在 4 发送方地址不存在 5 接收方地址不存在或错误
* 6 邮件服务器连接不上,服务器配置失败 7.系统创建邮箱服务失败
*
*
*/
private int returnCode; //邮件发送返回码
private String returnMessage; //返回的错误信息
public SendMailResult(){
this.returnCode=0;
this.returnMessage="SUCCESS";
}
public SendMailResult(int returnCode, String returnMessage) {
super();
this.returnCode = returnCode;
this.returnMessage = returnMessage;
}
public void setResult(int returnCode,String returnMessage){
this.returnCode = returnCode;
this.returnMessage = searchReturnMessage(returnCode);
}
private String searchReturnMessage(int returnCode){
String result=null;
switch(returnCode){
case 0: result="SUCCESS";
case 1: result="server adress missing !";break;
case 2: result="username missing !";break;
case 3: result="port missing !";break;
case 4: result="sender missing !";break;
case 5: result="receiver missing or wrong!";break;
case 6: result="server connect error,check the server configration!";break;
case 7: result="system error!";break;
case 8: result="username password error !";break;
default: result="";
}
return result;
}
public int getReturnCode() {
return returnCode;
}
public void setReturnCode(int returnCode) {
this.returnCode = returnCode;
this.returnMessage=searchReturnMessage(returnCode); //给code赋值的同时给message赋值;
}
public String getReturnMessage() {
return returnMessage;
}
public void setReturnMessage(String returnMessage) {
this.returnMessage = returnMessage;
}
@Override
public String toString() {
return "ErrorCode:"+returnCode+" ErrorMessage:"+returnMessage;
}
}
package javamail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailConnectException;
public class SendMailImpl implements SendMail{
public SendMailResult sendMail(String host,int port,String username,
String password,String subject,String contentType,
Date date,String header,Object contents,Address from,InternetAddress[] toUsers){
SendMailResult result = new SendMailResult();
if(isValidInput(result, host, username, port,from,toUsers))
{
Properties prop = mailConfig(true,true,host,username,port);
Session session = Session.getInstance(prop); //根据prop配置创建一个新的session对象
try {
Transport transport = session.getTransport();
transport.connect(host,port,username,password); //建立和邮箱服务器的链接
MimeMessage message = createMessage(session, from, toUsers, header, subject, contents, contentType, date);
transport.sendMessage(message,toUsers); //发送邮件
transport.close();
} catch (NoSuchProviderException e) {
result.setReturnCode(7);
// e.printStackTrace();
return result;
}catch (MessagingException e) {
System.out.println("host:"+host+" port:" +port+" username:"+username+" password:"+password);
if(e instanceof MailConnectException){
result.setReturnCode(6);
}else if(e instanceof AuthenticationFailedException){
result.setReturnCode(8);
}
else
result.setReturnCode(7);
// e.printStackTrace();
return result;
}
return result;
}else{
return result;
}
}
/**
* toUsers 必须是逗号隔开的String字符串
* @param toUsers
* @param date
* @param header
* @param subject
* @param contents
* @return
*/
public SendMailResult sendMailWithDefaultSetting(String toUsers,Date date,String header,String subject,String contents)
{
SendMailResult result =new SendMailResult();
if(toUsers!=null && toUsers.length()>0)
{
try{
InternetAddress[] to=InternetAddress.parse(toUsers);
result = sendMail(SendMail.HOST, SendMail.PORT, SendMail.SYSTEM_USER,SendMail.SYSTEM_USER_PASSWORD,
subject, SendMail.CONTENT_TYPE,date, header, contents, new InternetAddress(SendMail.SYSTEM_USER_ADDRESS),to);
}catch(AddressException e){
result.setReturnCode(5);
}
}
return result;
}
/**
* 邮箱发送方初始配置信息
* @param isDebug
* @param isStrict
* @param hostAddress
* @param username
* @param port
* @return
*/
private Properties mailConfig(boolean isDebug,boolean isStrict,String hostAddress,String username,int port){
Properties prop = new Properties();
String debug = (isDebug)?"true":"false";
String strict = (isStrict)?"true":"false";
hostAddress=(hostAddress==null)? SendMail.HOST : hostAddress;
String protocol=SendMail.DEFAULT_PROTOCOL; //设置发送邮件协议为smtp
port=(port<=0)? SendMail.PORT : port;
username=(hostAddress==null)? SendMail.SYSTEM_USER:username;
prop.setProperty("mail.debug",debug); //是否开启调试
prop.setProperty("mail.mime.address.strict", strict); //邮箱地址是否严格检查
prop.setProperty("mail.protocol.host", hostAddress); //设置邮箱发送服务器地址
prop.setProperty("mail.transport.protocol", protocol); //设置邮箱服务器发送协议smtp
prop.setProperty("mail.protocol.user", username); //设置发送方
prop.setProperty("mail.protocol.port", String.valueOf(port)); //设置邮箱服务器发送端口
return prop;
}
/**
* 构成邮件体的通用方法
* @param session
* @param from
* @param toUsers
* @param header
* @param subject
* @param contents
* @param contentType
* @param sendDate
* @return
*/
private MimeMessage createMessage(Session session,Address from,InternetAddress[] toUsers,String header,String subject,Object contents,String contentType,Date sendDate){
MimeMessage message = new MimeMessage(session); //创建发送邮件体
try {
message.addFrom(new Address[]{from});
message.addHeader(header, header);
message.addRecipients(Message.RecipientType.TO, toUsers);
message.setSubject(subject);
message.setContent(contents, contentType);
if(sendDate.before(new Date())) //如果发送时间为小于当前时间,设为立即时间发送
sendDate = new Date();
message.setSentDate(sendDate); //设定发送时间
} catch (MessagingException e) {
e.printStackTrace();
}
return message;
}
private boolean isValidInput(SendMailResult result,String host,String username,int port,Address from,Address[] to){
if(host==null||host.equals("")){
result.setReturnCode(1);
result.setReturnMessage("server adress missing !");
return false;
}else if(username==null||username.equals(""))
{
result.setReturnCode(2);
return false;
}else if(port<=0)
{
result.setReturnCode(3);
return false;
}else if(from==null){
result.setReturnCode(4);
return false;
}else if(to==null||to.length<1){
result.setReturnCode(5);
return false;
}
return true;
}
public static void main(String[] args) throws Exception {
SendMailResult result = new SendMailImpl().sendMail("mail.xx.com",25, "username","password","java mail test!","text/plain; charset=utf-8",
new Date(),"java mail test!","http://www.baidu.com",new InternetAddress("xx@xx.com"),new InternetAddress[]{new InternetAddress("xx@xx.com"),new InternetAddress("xx@xx.com")});
System.out.println(result);
Thread.sleep(1000);
result = new SendMailImpl().sendMailWithDefaultSetting("xx@xx.com,xx@xx.com,xx@xx.com", new Date(), "", "javamail test!!", "hello 我用自己的程序给你发邮件了咯!");
System.out.println(result);
}
}
package javamail;
import java.util.Date;
import javax.mail.Address;
import javax.mail.internet.InternetAddress;
public interface SendMail {
public static String HOST="xx";
public static String SYSTEM_USER="xx";
public static String SYSTEM_USER_ADDRESS="xx@xx.com";
public static String SYSTEM_USER_PASSWORD="xx";
public static String DEFAULT_ENCODING="base64";
public static String DEFAULT_CHARSET="UTF-8";
public static String DEFAULT_PROTOCOL="smtp";
public static boolean SMTP_AUTH = false;
public static boolean ISDEBUG=false;
public static int PORT=25; //不同邮箱端口不同
public static String CONTENT_TYPE="text/plain;charset=utf-8";
/**
* 这个方法包含发送邮件需要配置的所有参数(暂时发送邮件功能不包含附件)
* @param host
* @param port
* @param username
* @param password
* @param subject
* @param contentType
* @param date
* @param header
* @param contents
* @param from
* @param toUsers
* @return
*/
public SendMailResult sendMail(String host,int port,String username,
String password,String subject,String contentType,
Date date,String header,Object contents,Address from,InternetAddress[] toUsers);
/**
* 这个方法根据默认系统配置发送邮件给接收方
* @param toUsers
* @param date
* @param header
* @param subject
* @param contents
* @return
*/
public SendMailResult sendMailWithDefaultSetting(String toUsers,Date date,String header,String subject,String contents);
}
package javamail;
public class SendMailResult {
/**
* returncode 1:服务器地址不存在 ; 2 发送方用户名不存在 3 邮件服务器端口设置不存在 4 发送方地址不存在 5 接收方地址不存在或错误
* 6 邮件服务器连接不上,服务器配置失败 7.系统创建邮箱服务失败
*
*
*/
private int returnCode; //邮件发送返回码
private String returnMessage; //返回的错误信息
public SendMailResult(){
this.returnCode=0;
this.returnMessage="SUCCESS";
}
public SendMailResult(int returnCode, String returnMessage) {
super();
this.returnCode = returnCode;
this.returnMessage = returnMessage;
}
public void setResult(int returnCode,String returnMessage){
this.returnCode = returnCode;
this.returnMessage = searchReturnMessage(returnCode);
}
private String searchReturnMessage(int returnCode){
String result=null;
switch(returnCode){
case 0: result="SUCCESS";
case 1: result="server adress missing !";break;
case 2: result="username missing !";break;
case 3: result="port missing !";break;
case 4: result="sender missing !";break;
case 5: result="receiver missing or wrong!";break;
case 6: result="server connect error,check the server configration!";break;
case 7: result="system error!";break;
case 8: result="username password error !";break;
default: result="";
}
return result;
}
public int getReturnCode() {
return returnCode;
}
public void setReturnCode(int returnCode) {
this.returnCode = returnCode;
this.returnMessage=searchReturnMessage(returnCode); //给code赋值的同时给message赋值;
}
public String getReturnMessage() {
return returnMessage;
}
public void setReturnMessage(String returnMessage) {
this.returnMessage = returnMessage;
}
@Override
public String toString() {
return "ErrorCode:"+returnCode+" ErrorMessage:"+returnMessage;
}
}
- javax.mail.jar (568.4 KB)
- 下载次数: 6
发表评论
-
自定义xsd扩展
2018-12-24 11:43 1189扩展xsd很简单,官方文档送上:https://docs.s ... -
cglib
2017-06-09 17:54 330import net.sf.cglib.core.Nami ... -
最近学习经验总结二
2017-03-02 15:50 0集合框架: Collection L ... -
最近学习经验总结一
2017-03-02 15:49 0java 基础(重点多线程,锁) ArrayList 数据 ... -
mysql乐观锁/悲观锁
2017-02-24 09:29 0http://chenzhou123520.iteye.co ... -
一致性hash
2017-02-23 19:47 0http://www.blogjava.net/hello-y ... -
单例模式写法之SingletonHolder
2017-02-20 11:16 1131public class SingleDemo { ... -
ThreadLocal源码分析一ThreadLocalMap类
2016-10-21 17:28 0接上文我们将到ThreadLocal基本相当于一个空壳,它 ... -
ThreadLocal源码分析一ThreadLocal类
2016-10-21 17:22 942ThreadLocal类提供线程局部变量。这些变量和其他普 ... -
阿里巴巴druid源码分析之 filter-chain设计模式
2016-09-20 18:18 7589druid是号称目前最好的java数据库连接池,温少写的代 ... -
ServiceLoader
2016-09-20 15:27 0https://my.oschina.net/hanzhank ... -
驼峰和下划线互转
2016-08-24 11:38 1273public class HumpLineUtil { ... -
java Eclipse配合开启远程debug
2016-08-11 11:18 432远程机器jar方式启动的时候需要指定dubug参数 ... -
java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)
2016-07-29 09:40 9252wait是指在一个已经进入了同步锁的线程内,让自己暂 ... -
java锁之CyclicBarrier(互相等待,直到大家都做完,一起开始下面)
2016-07-28 14:43 804参考文章:http://blog.csdn.net/lmc ... -
java锁之CountDownLatch(等待最后一个完成)
2016-07-28 11:19 1979线程同步工具,允许一个线程(或者多个线程)等待其他所有线程 ... -
java锁之Semaphore(信号量,限制并发数量)
2016-07-28 11:17 2035Semaphore也是一个线程同步的辅助类,可以维护当前访 ... -
内部类和final关键字
2016-07-28 11:08 407首先,内部类被编译的时候会生成一个单独的内部类的.class ... -
visitor设计模式
2016-06-29 14:09 288visitor设计模式 visitor设计模式的思 ... -
asm字节码生成技术,cglib
2016-06-29 11:25 597相关技术blog class文件解析: https:/ ...
相关推荐
NULL 博文链接:https://seachen.iteye.com/blog/1849932
JavaMail-1.5版本最新官方API。 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于...
javamail最新jar包1.5.5和1.4.5两个版本
很好的邮件处理代码,1.5版本,作为build path放在eclipse里面,就可以用啦! oracle官方推的,很好!jdk1.6版本以上用起来很方便。
一个javamail发送邮件的实例,如果运用于web项目,注意版本冲突的问题.j2ee 1.5 中的mail包中的有个类和mail.jar有冲突,将1.5中mail包中的类删除即可.但是1.4是没有问题的.
JavaMail1.6.0,该版本解决了1.5.x版本上qq邮箱根据uid获取message对象为空的解析bug
ant发邮件所需的jar(activation.jar+javax.mail.jar+mail.jar+commons-email-1.2.jar)
系统环境: <br>Java: :jdk1.5 WebServer: :tomcat5.5 OperationSystem :windowsXP <br>EmailServer :james-binary-2.3.1.zip EmailClient :yawebmail-1.0.1.zip <br>主要实现功能: 今天我们...
本书的范例都基于最新的JDK 1.5版本,书中内容包括:Java网络编 程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、 数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、...
本书讨论了JDK1.4和1.5(现在已命名为J2SE5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDPsocket、服务器socket、URL和URI、组播以及...
jaxm-api.jar(JAXM),mail.jar(JavaMail),saaj-api.jar(SAAJ),saaj-impl.jar(SAAJ),我的JAXP已经包括在jdk1.5中了。另外还要有个支持Servlet的容器。 好了,准备工作完毕了,下面开始我们的学习:
dumbster-1.5, oracle,dwr-1.1.1, emma-2.0.53, hibernate-3.2, jakarta-commons, javamail-1.3.1, jmock-1.1.0, junit3.8.1 logging-log4j-1.2.11, pmd-3.0 velocity-1.4, urlrewrite-3.0-beta, xdoclet-1.3-...
Struts2,Spring,Hibernate,DWR,JavaMail,以及少部分正则表达式。其实都是非常基础简单的应用,目的就是让大家看看这些框架是如何协同工作的。开发平台为:Winxp2+JDK1.5+Tomcat5.5+MySQL5.0。 以下是本例子的...
本书讨论了JDK 1.4和1.5(现在已命名为J2SE 5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播...
本书讨论了JDK1.4和1.5(现在已命名为J2SE5)中所作的所有修改和增补。本书内容全面涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章集涉及到TCP和UDP socket 、服务器socket、URL和URI、组播以及...
Struts2,Spring,Hibernate,DWR,JavaMail,以及少部分正则表达式。其实都是非常基础简单的应用,目的就是让大家看看这些框架是如何协同工作的。开发平台为:Winxp2+JDK1.5+Tomcat5.5+MySQL5.0。
本书讨论了JDK 1.4和1.5(现在已命名为J2SE 5)中所做的所有修改和增补。本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播...
本书内容全面,涵盖了从网络基础知识到远程方法调用(rmi)等各方面的内容,书中章节涉及到tcp和udp socket、服务器socket、url和uri、组播以及特殊用途的api(如javamail)等等。本书展示了如何使用jsse编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...