知识大全 Java邮件开发与反垃圾邮件机制
Posted 知
篇首语:壮心未与年俱老,死去犹能作鬼雄。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java邮件开发与反垃圾邮件机制相关的知识,希望对你有一定的参考价值。
Java邮件开发与反垃圾邮件机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一 JavaMail与SMTP
通常我们使用JavaMail 都是通过SMTP服务器来发送邮件 比如说我有一个的邮件账号 想给的邮箱发送邮件
用户A首先将需要发送的邮件通过SMTP协议发送给他所在的邮件服务器domain 然后domain 判断收件人所在的域为domain 于是domain 通过SMTP协议再重新将邮件发送到domain 最后用户B连接到自己的邮件服务器domain 接收邮件 通常domain 会将邮件缓存 以便出错时重新发送 如果重试几次后还是发送失败 可能会给用户A发送一封邮件以告知邮件发送失败 如果用户A是一个应用的话 很难知道邮件发送成功与否
另外一种做法是 用户(或者我们自己的应用)直接连接对方的SMTP服务器来发送邮件 其实就是连接到对方的 端口 然后按顺序发送一些SMTP的命令 详细的SMTP信息 大家可以查阅相应资料 JavaMail对这些底层的数据传输做了很好的包装
只要用户A发送的数据格式和前面domain 发送的相同 对于domain 来说 没什么区别 而且在这种方式下 如果邮件发送失败 比如收件人地址不存在 用户A会马上得到邮件发送失败信息 所以在实际的应用中 这种方式比较常见 但是这种方式需要知道对方的SMTP服务器的地址 在Windows下 可以在命令行执行nslookup 输入 set type=mx 然后输入需要查找的域名 比如 就可以查找到它的SMTP服务器地址 同样在Java中 可以通过JNDI或者开源的dnsjava查找收件人所在域的SMTP服务器地址 这里给出一个简单的例子
public class JavaMailSendingHandler implements ILocalEmailSendingHandler public void send(String to String from String subject String content String contentType) throws Exception Properties props = new Properties(); props put( mail smtp localhost getHost(from)); String server = getSMTPServerByJNDI(getHost(to)); props setProperty( mail smtp host server); Session session = Session getInstance(props null); MimeMessage message = new MimeMessage(session); message setContent(content contentType); message setSender(new InternetAddress(from)); message setFrom(new InternetAddress(from)); message setRecipient(RecipientType TO new InternetAddress(to)); message setSubject(subject); message setHeader( Content Type contentType); message setHeader( Content Transfer Encoding bit ); SimpleDateFormat format = new SimpleDateFormat( EEE d MMM yyyy HH:mm:ss Z ); message setHeader( Date format format(new Date())); Transport send(message new Address[] new InternetAddress(to) ); private String getHost(String address) return address substringaddress indexOf( @ ) + ); //通过JNDI 查找给定域的邮件服务器 private String getSMTPServerByJNDI(String host) throws Exception Properties jndiEnvironmentProperties = new Properties(); jndiEnvironmentProperties put( java naming factory initial sun jndi dns DnsContextFactory ); DirContext initialDirContext = new InitialDirContext(jndiEnvironmentProperties); Attributes attributes = initialDirContext getAttributes(host new String[] MX ); Attribute attribute = attributes get( MX ); String[] servers = new String[attribute size()]; for (int i = ; i < attribute size(); i++) servers[i] = attribute get(i) toString(); String server = servers[ ]; server = server substring(server indexOf( ) + servers[ ] length() ); return server;
二 反垃圾邮件机制
最简单的反垃圾邮件机制就是检查邮件的每个头信息是否短缺 格式是否正确 另外比较复杂的一种是SPF(Sender Policy Framework) 它主要用来防止伪造的邮件地址 还是采用前面的例子说明 在用户直接给domain 发送邮件时 需要告示邮件发送者地址 这样domain 会根据邮件发送者的地址所在的域名 查找到该域的有效的邮件服务器地址 如果用户所在的计算机不再查找的结果之中 那就说明 发件人地址是伪造的 从而断定是垃圾邮件
cha138/Article/program/Java/hx/201311/25788相关参考
java实现邮件的发送分享方法如下 publicclassPopupAuthenticatorextendsAuthenticator publicPasswordAuthentication
Java发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 记得曾经学习用javamail发
要实现邮箱的发送需要一个已知账号和密码的邮箱并且开通了STMPPOP服务常见主流邮箱邮件收取和发送popstmp服务配置汇总介绍一文中详细介绍了各个邮箱开通服务的步骤 &nb
cha138/Article/program/Java/JSP/201404/30613
Java发邮件带附件测试通过 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! packagecnb
基于SMTP的JAVA邮件发送程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个程序没有使
Java发邮件(email.jar)的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我想在
发送电子邮件是许多需要用户注册的网站的通用功能通过正则表达式我们可以过滤掉不符合电子邮件格式的输入但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址通常验证电子邮件真实有效
怎么使用Java实现把邮件附件下载到本地 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个功能
在Java中发送邮件的一个相当完善的脚本 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pack