1.SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个
服务器
2.SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返
回状态的三位数字代码
3.SMTP在TCP协议25号端口监听连接请求
4.连接和发送过程
SMTP协议说复杂也不复杂(明明带有“简单”这个词嘛),说简单如果你懂得Sock。不过现在只是我们利用的就是第一条中说的,从客户机传输到服务器,当我们向一台服务器发送邮件时,邮件服务器会首先验证邮件发送地址是否真的存在于本服务器上。
操作的步骤如下:
连接服务器的25端口(如果没有邮件服务,连了也是白连)
发送helo问候
发送mail from命令,如果返回250表示正确可以,连接本服务器,否则则表示服务器需要发送人验证。
发送rcpt to命令,如果返回250表示则Email存在
发送quit命令,退出连接
private static String[] removeInvalidateAddress(String[] addresses, String mailFrom)
{
ArrayList<String> validateAddresses = new ArrayList<String>();
String normalAddress = null;
int code;
SMTPTransport smptTrans = null;
if(StringUtils.isEmpty(mailFrom) || null == addresses)
{
return new String[0];
}
String sendCmd = "MAIL FROM:" + normalizeAddress(mailFrom);
try
{
smptTrans = (SMTPTransport)sendSession.getTransport("smtp");
smptTrans.connect();
code = smptTrans.simpleCommand(sendCmd);
if(code != 250 && code != 251)
{
logger.error("send from invalidate" + mailFrom);
}
else
{
for(String address : addresses)
{
normalAddress = normalizeAddress(address);
String cmd = "RCPT TO:" + normalAddress;
code = smptTrans.simpleCommand(cmd);
if(code == 250 || code == 251)
{
validateAddresses.add(address);
}
}
}
}
catch(MessagingException e)
{
logger.error("Validate mail address error. send from " + mailFrom, e);
}
String[] result = validateAddresses.toArray(new String[validateAddresses.size()]);
return result;
}
private static String normalizeAddress(String addr)
{
if ((!addr.startsWith("<")) && (!addr.endsWith(">")))
return "<" + addr + ">";
else
return addr;
}
分享到:
相关推荐
### Java邮件开发实例知识点 #### 一、Java邮件发送机制概览 在Java开发中,邮件功能是非常实用的一项技术,可以用于用户注册验证、找回密码等场景。本篇将通过一个具体的实例——“Java邮件开发实例”,来详细...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
下面是一个简单的Java代码实例,展示了如何通过SMTP发送带有附件的邮件: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class EmailSender { public static...
Java邮件检验库 JEmval 是一个专门为Java开发者设计的实用工具,用于验证电子邮件地址的有效性。这个库提供了高效且准确的验证机制,确保输入的邮箱地址符合标准的格式,从而提高应用程序的数据质量。在实际开发中,...
Java发送邮件是软件开发中常见的功能,特别是在自动化通知、用户注册验证或客户服务中。本教程将详细介绍三种在Java中发送邮件的方法,每种方法都...记得在生产环境中配置真实的SMTP服务器信息,确保邮件能够成功发送。
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
JavaMail是Java编程语言中用于处理电子邮件的API,它提供了丰富的功能,包括发送、接收、管理邮件等。本文将深入探讨如何使用JavaMail API在Java应用程序中实现发送邮件的功能,同时也会涉及验证码验证以及网页版...
实例122 基于EJB的真实世界模型 433 实例123 EJB的商业应用——定购单 447 第11章 Java 2 Platform Micro Edition编程 475 实例124 插入和替换表单元素 476 实例125 使用线程与定时 478 实例126 J2ME绘图 480 实例...
在表中要分别包括职工的姓名、组别、编号和照片,姓名、组别可以直接从单位数据库里导入,姓名、编号的排列顺序要和前面照片的编号顺序一致,照片一栏并不需要插入真实的图片,而是要输入此照片的磁盘地址,比如“E:...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
在这个实例中,我们可能能学到如何使用常见的编程语言(如Python、Java或JavaScript)以及相关的库(如SMTP库来发送邮件,HTTP库来处理请求)来实现这些功能。此外,我们还将接触到数据库操作,用于存储和检索验证码...
505 实例137 获取本机的Mac地址 508 实例138 获取Java系统信息 509 实例139 控制Java与C++程序的通信 510 实例140 访问Windows注册表 514 第13章 Java配置与集成 523 实例141 J2SDK的安装配置 524...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和处理邮件。在Java应用中,我们通常使用Java Mail API来实现电子邮件功能,包括创建、发送带有附件的邮件、设置邮件主题和内容等。...
通过这个简单实例,你可以了解到如何在Java项目中配置和使用Freemarker,以及如何构建和处理数据模型。随着深入学习,你将掌握更多高级特性,如宏、指令和自定义函数,从而更好地利用Freemarker来构建复杂的应用。