SMTP协议

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)

POP3协议

同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

下图用于演示两帐户相互发送邮件的过程

JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。

发送邮件的API:

Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。

接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。

Session类

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。

邮件组织结构相关的API

MimeMessage类表示整封邮件。

MimeBodyPart类表示邮件的一个MIME消息。

MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。

具体的例子程序

package cn.edu.dlmu.send;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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; public class SendMail { public static void main(String[] args) throws Exception { Properties prop = new Properties();
//连接的邮件服务器的主机名
prop.setProperty("mail.smtp.host", "smtp.sina.com.cn");
//发送邮件的协议
prop.setProperty("mail.transport.protocol", "smtp");
//是否向邮件服务器提交认证
prop.setProperty("mail.smtp.auth", "true"); //创建session
Session session = Session.getInstance(prop);
session.setDebug(true);
//得到transport
Transport ts = session.getTransport();
//连接邮件服务器
ts.connect("smtp.sina.com.cn", "xxxx@sina.com", "xxxxx");
//发送邮件
MimeMessage message = createMessage(session);
ts.sendMessage(message, message.getAllRecipients());
ts.close();
} public static MimeMessage createMessage(Session session) throws Exception { MimeMessage message = new MimeMessage(session); //设置邮件的基本信息
message.setFrom(new InternetAddress("xxxx@sina.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("1219070362@qq.com"));
message.setSubject("test"); //正文
MimeBodyPart text = new MimeBodyPart();
//设置charaset可以解决中文正文的乱码问题,内嵌可下载的图片
text.setContent("你好xxx,<img src='c:/dog.jpg' />测试成功!<img src='cid:aaa.jpg' />", "text/html;charset=gbk");
//图片1
MimeBodyPart image = new MimeBodyPart();
image.setDataHandler(new DataHandler(new FileDataSource("src/88.jpg")));
image.setContentID("aaa.jpg");
//附件
MimeBodyPart attach = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("src/javamail架包.jar"));
attach.setDataHandler(dh);
//解决文件中文乱码问题
attach.setFileName(MimeUtility.encodeText(dh.getName())); //描述正文和图片的关系
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
mp.addBodyPart(image);
mp.setSubType("related"); //描述正文和附件
MimeMultipart mp2 = new MimeMultipart();
mp2.addBodyPart(attach);
//将正文封装为一个body
MimeBodyPart content = new MimeBodyPart();
content.setContent(mp); mp2.addBodyPart(content);
mp2.setSubType("mixed"); message.setContent(mp2);
message.saveChanges(); return message;
} }

Java收发邮件过程中具体的功能是怎么实现的的更多相关文章

  1. Java实例化对象过程中的内存分配

    Java实例化对象过程中的内存分配: https://blog.csdn.net/qq_36934826/article/details/82685791 问题引入这里先定义一个很不标准的“书”类,这 ...

  2. 解决 java 使用ssl过程中出现"PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"

    今天,封装HttpClient使用ssl时报一下错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc ...

  3. Java 程序运行过程中的内存分析

    作为 java 程序员,都应该知道 Java 程序运行在 JVM(Java Virtual Machine,Java 虚拟机)上,可以把 JVM 理解成 Java 程序和操作系统之间的桥梁,JVM 实 ...

  4. 【Mail】telnet收发邮件过程

    telnet发送邮件 关于电子邮件的基础知识请参照:[Mail]邮件的基础知识和原理 smtp协议是一个简单的邮件传输协议,利用它我们可以将邮件发送给别人,这里将通过telnet这个程序利用smtp协 ...

  5. 使用Java连接HBASE过程中问题总结

    本文是我个人在连接服务器的HBASE过程的一些问题总结. 一.用户和主机名的设置 1.1 报错:Insufficient permissions(user=Administartor) 原因:本地ho ...

  6. EasyPlayer安卓Android流媒体播放器实现直播过程中客户端快照功能

    本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到Easy ...

  7. JAVA安装过程中出现的“javac不是内部或外部指令”的解决方法

    近来重新安装了JAVA,安装过程中出现问题,网上找到解决办法,汇总发布. 解决流程: 1.确定自己的环境变量设置没问题,没有出现遗漏 : . 等情况 (具体环境变量设置百度) 2.环境变量设置后 ,d ...

  8. Java SE 5.0 - SE 8 的功能增强

    Table of Contents 前言 Java 5.0 Generics Enhanced for Loop Autoboxing Typesafe Enums Varargs Static Im ...

  9. java对象在内存中的结构(HotSpot虚拟机)

    一.对象的内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 从上面的这张图里面可以 ...

随机推荐

  1. tomcat 闪退处理

    参考文章:https://www.cnblogs.com/lanjianhappy/p/6491436.html 首先确保JDK环境变量已经配置好! 设置jdk环境 变量:https://jingya ...

  2. win10连接外接鼠标怎么禁用触摸板

    Win10笔记本如何禁用触摸板呢?Win10笔记本如何设置“插入鼠标自动禁止触摸板功能”呢?虽然笔记本触摸板在一定程度上可以方便我们的 操作,但是在以鼠标和键盘做为重要的输入设备的情况下,笔记本触摸板 ...

  3. Azure DevKit(AZ3166)源码找不到头文件问题

    Get “Error Presented: #include errors detected” when opening a project The error message is Error Pr ...

  4. 一、JSP九大内置对象 二、JAVAEE三层架构和MVC设计模式 三、Ajax

    一.JSP九大内置对象###<1>概念 不需要预先申明和定义,可以直接在jsp代码中直接使用 在JSP转换成Servlet之后,九大对象在Servlet中的service方法中对其进行定义 ...

  5. CreateEvent

    事件对象就像一个开关:它只有两种状态---开和关.当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”.可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该 ...

  6. redis 持久化与备份策略

    持久化(persistence) 本文是 Redis 持久化文档 的中文翻译. 这篇文章提供了 Redis 持久化的技术性描述,推荐所有 Redis 用户阅读. 要更广泛地了解 Redis 持久化,以 ...

  7. Netty入门(五)ChanneHandler

    本节主要讨论了 Netty 的数据处理组件 ChannelHandler. 一.Channel 生命周期 Channel 有个简单但强大的状态模型,下面是 Channel 的四个状态: Channel ...

  8. jQuery做字符串分隔

    var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.s ...

  9. python变量的引用,浅拷贝

    python的变量是对象引用 l1和l2引用的相同的对象,所以会相互影响 元组不变的是引用的物理地址,如果引用的对象是可变的,那么远祖也会发生变化 但是t1[2]的id时钟没有发生变化 2 默认是浅拷 ...

  10. Linux安装配置apache

    Linux安装配置apache   1.获取软件: http://httpd.apache.org/  httpd-2.2.21.tar.gz 2.安装步骤: 解压源文件: 1 tar zvxf ht ...