java垃圾邮件过滤
★. 有没有靠谱的净水或纯水设备的厂家,求联系方式!
这要看你要的具体设备是什么了?之前我们工厂新上的一个纯水设备是悦纯的。当时是我负责这块,机器的安装调试都是悦纯工厂亲自来人做的,包括调试、试用、讲解全部都说的很清楚。我感觉他们服务和产品质量都挺好的,有需要你可以联系下,联系方式是 18156052550 (微信同号)
A. 求贝叶斯算法基于英文邮件文本分类的java代码
以前做过,这个直接谷歌一下就能找到不少资料。提醒你一点,做垃圾过滤不用很多attribute。
B. JAVA发送邮件被当成垃圾邮件,怎么办
你这不是黑白名单的问题 明显是2032程序本身333有问807题。
C. 为什么我的javamail程序发送的都是垃圾邮件
你的发信邮件是什么呢?
如果平时发了很多垃圾邮件. 就会被其他服务商拉入到黑名单的.
比如你可以看到许多邮箱有垃圾邮件举报功能.
D. 用javaMail发邮件时出现下面的错误是怎么回事 SMTPSendFailedException: 554 DT:SPM 126 smtp7
554 DT 表示163的服务器端认为你发出的邮件为垃圾邮件,并不是你的代码出了问题。如果可以的话,建议用一些不是很大众化的邮箱地址去实现Java后台发邮件。
E. 有木有JAVA关于邮件过滤方面的书
邮件过滤系统的设计与实现 王博 【摘要】: 随着电子邮件的广泛应用,各种垃圾、病毒邮件入侵邮件系统,严重影响邮件系统的正常使用。目前更多过滤系统是通过采用设置IP策略、邮件标题查找、MIME长度限制或具有一定智能查找的算法等方案来在单机上实现。本方案主要采用设计垃圾、病毒邮件收集中心,搜集来自不同客户端的配制策略,收集中心对数据进行综合评定,根据处理结果决定是否通知邮件服务器,如果通知邮件服务器,服务器更新数据库,此方案使邮件服务器及时的发现垃圾、病毒邮件,节省了网络带宽并提高了过滤准确效率,也节省了宝贵的系统资源。 在邮件过滤系统设计中,利用了JAVAMAIL软件包的开发技术,涉及基于邮件附件大小、垃圾词语、垃圾邮件产生源地址及病毒过滤等方面,缩短了开发周期。同时,山于JAVAMAIL是JAVA语言的一个子集,自然,在界面开发中用了JAVA开发工具。并且,由于垃圾、病毒邮件是在动态变化的,如何高效准确快速的进行判断是软件设计中要考虑的一个非常重要的因素。对此,本系统设计了采用基于CORBA技术的收集中心,它的主要工作是收集来自不同客户端的邮件数据,对从不同客户端采集来的数据进行分类整理、综合测评,对不同等级的可疑词语、短语、句子或者附件进行评价,将得到的结果在本地数据库保存,并及时通知邮件服务器对数据进行更新。 邮件过滤系统的设计离不开对传统邮件系统的深入研究,本文也详细剖析了邮件系统从高层到底层的实现过程,包括其中涉及到的不同层次的协议、服务与接口等。同时,在实现过程中也用到了一些邮件协议,比如:SMTP协议、POP协议和IMAP协议等。并且,在过滤过程中需要对邮件格式进行处理,这涉及到MIME,如何按照一定的MIME格式对邮件内容进行提取,也是邮件过滤的一个很重要的方面。同时,在对邮件附件过滤过程中,需要进行很多相关的提取处理,在用JAVAMAIL开发过程中,这也是很重要的一个方面。 在对附件处理过程中,需要进行扫描、查毒处理,查毒可以采用多种方式。本设计主要采用按特征值进行查毒的方式,该方法快速,实现简单,但是在对付一些变种病毒邮件上,由于该方法自适应能力差,所以有一定的限制。同时,病毒特征码数据库也要能进行动态的更新,以求能实时的进行邮件扫描。 【关键词】: 过滤 协议 垃圾邮件 病毒 【学位授予单位】: 山东理工大学 【学位级别】: 硕士 【学位授予年份】: 2006 【分类号】: TP393.098 【DOI】: CNKI:CDMD:2.2006.100637 【目录】: 第一章 绪论8-17 1.1 垃圾邮件的来源与危害8 1.2 垃圾邮件的特点与过滤垃圾邮件的困难性8 1.3 病毒邮件的特点与危害8-9 1.4 邮件过滤的必要性9-10 1.5 常见的邮件过滤器10-15 1.5.1 MTA过滤器11-13 1.5.2 MDA过滤器13 1.5.3 MUA过滤器13-15 1.6 邮件过滤器的研究现状15-17 第二章 电子邮件系统17-27 2.1 邮件系统综述17-19 2.1.1 电子邮件工作原理概述17-18 2.1.2 电子邮件的消息格式18-19 2.2 电子邮件的发送与接收19-22 2.2.1 MUA发送邮件20 2.2.2 通过MTA传输邮件20-21 2.2.3 MDA传递邮件21 2.2.4 MRA获取邮件21 2.2.5 由MUA获取邮件21-22 2.3 邮件传输涉及的协议、规则与服务22-27 2.3.1 SMTP协议22 2.3.2 POP与IMAP4协议22-23 2.3.3 DNS服务器在邮件系统中的作用23 2.3.4 MIME—多用途因特网邮件扩展23-27 第三章 邮件过滤系统的总体设计27-55 3.1 邮件系统的设计与实现28-40 3.1.1 邮件客户端运行界面28-32 3.1.2 邮件服务端运行界面32-35 3.1.3 邮件客户端设计35-37 3.1.4 邮件服务器设计37-40 3.2 邮件过滤系统的设计与实现40-52 3.2.1 对邮件主题包含一定关键词的限制40 3.2.2 对信件来源地进行限制40-41 3.2.3 对邮件信头字段大小的限制41 3.2.4 对邮件全文字节数的限制41-42 3.2.5 对邮件附件名的限制42 3.2.6 对邮件附件大小的限制42-43 3.2.7 根据MIME Content-Type和Content-Disposition字段里的文件类型过滤43 3.2.8 对邮件附件内容过滤43-52 3.2.8.1 base64编码与解码44 3.2.8.2 JAVA模式匹配44-45 3.2.8.3 邮件病毒扫描45-52 3.3 收集中心的设计与实现52-55 3.3.1 定义IDL52-53 3.3.2 将IDL编译成Java接口以实现该接口53-54 3.3.3 定义实现此接口的类54 3.3.4 收集中心的实现54-55 第四章 系统设计中的关键技术55-61 4.1 JAVAMAIL技术55-58 4.1.1 会话类(session)55 4.1.2 消息类(MimeMessage)55-56 4.1.3 地址类56-57 4.1.4 身份验证类57 4.1.5 传输类57 4.1.6 存储类和文件夹类57-58 4.2 CORBA技术58-61 4.2.1 ORB58-59 4.2.2 存根与框架59 4.2.3 IDL59-60 4.2.4 命名服务60 4.2.5 JAVA中引入的CORBA包60-61 第五章 邮件过滤性能评价61-63 5.1 实验结果61 5.2 实验结果分析61-63 第六章 总结与展望63-64 6.1 工作总结63 6.2 展望63-64 致谢64-65 参考文献65-68 附录一 开发环境68-69 附录二 部分源代码69-90 作者在读硕士期间发表的论文90 这本书你去书店看看有木有
采纳哦
F. java mail qq垃圾邮件
各自的邮箱都有不同的判断垃圾邮件的机制。
这个无法一句话说得清楚的,而且,一般这些规则他们都不公开的,只有靠自己的经验去摸索。一般不涉及太多广告类的关键词就没事。
研究下你发送的邮件有什么问题?是不是涉及一些关键词了?
G. 怎么让带链接的邮件不被outlook认为是垃圾邮件
1、去掉超链接的下划线
2、outlook---工具----信任中心---自己设置
3、还有就你你那个链接本身有安全隐患,有恶意插件或者额外链接
H. java如何发送匿名邮件
任何一个人都可以连接到SMTP服务器发送邮件,SMTP服务器大部分不检查信息的真实性.你可以随便写你喜欢用的名字,
你也可能会收到来自president@whitehouse.gov的邮件,请你去参加白宫前草坪上的聚会.
也就是说,发件人的名字是你自己写进去的.你可以随便写.发件人的地址也是随便写的.所以你自己写的邮件程序,就相当于匿名的.不过你可能发不出去,另外一边的POP3服务器可能会把你的邮件当成垃圾邮件,直接过虑掉.
I. 垃圾邮件的主要种类
一、站点宣传
许多网友都建立了自己的个人站点,在吸引更多的网民访问的过程中,有些人不在自己站点的内容上下功夫,而是东抄一点、西拉一点,还想让站点上的计数器哗啦哗啦地涨,于是就走了偏门,给一大堆不管他们认不认识的网民狂发E-mail(有人半个小时内竟向上千个信箱连续发信多次!)。此类垃圾信制造者真是越来越多。如果说这些人的举动还情有可原(至少他们的目的不是为了牟利)。还有一些靠卖虚拟主机发财的公司就显得很恶劣了,他们已经赫然将为客户站点提供E-mail宣传作为附加服务列在了大大小小的广告上。这帮专业的垃圾信制造者最可恨,因为他们一般拥有自己的发信服务器,叫你有苦无处诉。
二、垃圾邮件删除病毒谣言
真正的E-mail病毒(不是指那些附件中的普通病毒,这些病毒只要不去运行它们的宿主文件,就不会对你的机器造成任何伤害)有没有?是有的。例如前一阵子利用OutLook堆栈溢出错误执行在信件中加入的恶意Java代码的病毒,以及一些只攻击Unix用户的病毒,例如在用户读信时会造成系统重启的E-mail病毒等。真正的E-mail病毒在国内几乎见不到,而且它们其实并不可怕,一般用户给软件打个补丁,或将一些默认设置改一改,它们就不能兴风作浪了。令人不解的是,国内流行的所谓“E-mail病毒”却都是一些假病毒。一些人借着真病毒的“威名”,狐假虎威,造一些“病毒” 谣言,说什么“当你看到这封E-mail时,你的机器已经感染上了XX非常厉害的病毒,某年某月某日就会暴发……”,接着还有一些人在收到这类信后,不知是出于好心还是恶意,很喜欢将这些“病毒”谣言再转发给他人,然后加上几句“我不知道这是不是真的”之类的话,于是谣言传多了就成了“真理”,许多人真的相信自己的机器被某个可怕的E-mail病毒感染了。这种几句唬人的话就宣布一个“病毒”诞生的恶作剧,实在是让人又好气又好笑。
三、网络杂志
应该承认,订上一两份好的网络杂志的确能给人带来不少有用的信息。但是,某些网络杂志的宣传和发行方式实在让人不敢恭维。我就莫名其妙的收到了XX评论寄来的长达几十KB的E-mail (该杂志属于某ISP&ICP,我曾向他们的一个站点申请过FTP上传帐号,也许因为这,被他们获得了我的信箱名称),这个杂志的内容倒还不是太糟,里面的“懒汉菜谱”我也喜欢看,但就这么不请自来,实在让我倒了胃口。还有南方那个有名的站点,如果你曾在它的站点申请过免费服务(每次它都不会忘向你要一个E-mail地址),它就会隔三岔五地塞几封它的邮件列表给你,名为试读,但这种无休无止的试读实在太强迫人了吧!“正规军”如此,一些个人办的网络杂志,更是乱来。不用预订,就会源源不断地发信过来,即使侥幸通过与它的主人进行反复交涉,停了一段时间,说不定什么时候此人又想进行“广泛宣传”了,你的信箱里又会塞满了他的大作。
四、连环邮件
时代在发展,传统的以普通邮件为主要传播手段的“金锁链”之类的连环信也很快在国际互联网上出现了它们的翻版。还是那些想发财又没什么真本领的家伙,继续编造一些像什么“只要你向信内所附的五个地址每人寄上X元,你就会在X天内收到XXX元”之类的谎言,还想着以此来谋取不义之财。当然和以前一样,他们也不忘在E-mail中加一点时代花絮来迷惑他人,什么“我是一个中年下岗女工,自从加入了这个连环信后,现在每月都能收到XXX元,高兴之余,要与大家分享”之类。因为用E-mail发连环信又方便又省钱,垃圾信制造者真是乐此不疲,他们实在也太小瞧了广大网民的智力了。
J. 基于布隆过滤器的非法URL识别,有没有能用Java
假如有1亿个不重复的正整数(大致范围已知),但是只有1G的内存可用,如何判断该范围内的某个数是否出现在这1亿个数中?最常用的处理办法是利用位图,1*108/1024*1024*8=11.9,也只需要申请12M的内存。但是如果是1亿个邮件地址,如何确定某个邮件地址是否在这1亿个地址中?这个时候可能大家想到的最常用的办法就是利用Hash表了,但是大家可以细想一下,如果利用Hash表来处理,必须开辟空间去存储这1亿个邮件地址,因为在Hash表中不可能避免的会发生碰撞,假设一个邮件地址只占8个字节,为了保证Hash表的碰撞率,所以需要控制Hash表的装填因子在0.5左右,那么至少需要2*8*108/1024*1024*1024=1.5G的内存空间,这种情况下利用Hash表是无法处理的。这个时候要用到另外一种数据结构-布隆过滤器(Bloom Filter),它是由Burton Howard Bloom在1970年提出的,它结合了位图和Hash表两者的优点,位图的优点是节省空间,但是只能处理整型值一类的问题,无法处理字符串一类的问题,而Hash表却恰巧解决了位图无法解决的问题,然而Hash太浪费空间。针对这个问题,布隆提出了一种基于二进制向量和一系列随机函数的数据结构-布隆过滤器。它的空间利用率和时间效率是很多算法无法企及的,但是它也有一些缺点,就是会有一定的误判率并且不支持删除操作。
布隆过滤器的原理
1
布隆过滤器需要的是一个位数组(这个和位图有点类似)和k个映射函数(和Hash表类似),在初始状态时,对于长度为m的位数组array,它的所有位都被置为0
2
对于有n个元素的集合S={s1,s2......sn},通过k个映射函数{f1,f2,......fk},将集合S中的每个元素sj(1<=j<=n)映射为k个值{g1,g2......gk},然后再将位数组array中相对应的array[g1],array[g2]......array[gk]置为1:
3
如果要查找某个元素item是否在S中,则通过映射函数{f1,f2.....fk}得到k个值{g1,g2.....gk},然后再判断array[g1],array[g2]......array[gk]是否都为1,若全为1,则item在S中,否则item不在S中。这个就是布隆过滤器的实现原理。
当然有读者可能会问:即使array[g1],array[g2]......array[gk]都为1,能代表item一定在集合S中吗?不一定,因为有这个可能:就是集合中的若干个元素通过映射之后得到的数值恰巧包括g1,g2,.....gk,那么这种情况下可能会造成误判,但是这个概率很小,一般在万分之一以下。
很显然,布隆过滤器的误判率和这k个映射函数的设计有关,到目前为止,有很多人设计出了很多高效实用的hash函数。并且可以证明布隆过滤器的误判率和位数组的大小以及映射函数的个数有关。假设误判率为p,位数组大小为m,集合数据个数为n,映射函数个数为k,它们之间的关系如下:
p=2-(m/n)*ln2 可得 m=(-n*lnp)/(ln2)2=-2*n*lnp=2*n*ln(1/p)
k=(m/n)*ln2=0.7*(m/n)
可以验证若p=0.1,(m/n)=9.6,即存储每个元素需要9.6bit位,此时k=0.7*(m/n)=6.72,即存储每个元素需要9.6个bit位,其中有6.72个bit位被置为1了,因此需要7个映射函数。从这里可以看出布隆过滤器的优越性了,比如上面例子中的,存储一个邮件地址,只需要10个bit位,而用hash表存储需要8*8=64个bit位。
一般情况下,p和n由用户设定,然后根据p和n的值设计位数组的大小和所需的映射函数的个数,再根据实际情况来设计映射函数。
尤其要注意的是,布隆过滤器是不允许删除元素的,因为若删除一个元素,可能会发生漏判的情况。不过有一种布隆过滤器的变体Counter Bloom Filter,可以支持删除元素,感兴趣的读者可以查阅相关文献资料。
END
布隆过滤器的应用
布隆过滤器在很多场合能发挥很好的效果,比如:网页URL的去重,垃圾邮件的判别,集合重复元素的判别,查询加速(比如基于key-value的存储系统)等,下面举几个例子:
1.有两个URL集合A,B,每个集合中大约有1亿个URL,每个URL占64字节,有1G的内存,如何找出两个集合中重复的URL。
很显然,直接利用Hash表会超出内存限制的范围。这里给出两种思路:
第一种:如果不允许一定的错误率的话,只有用分治的思想去解决,将A,B两个集合中的URL分别存到若干个文件中{f1,f2...fk}和{g1,g2....gk}中,然后取f1和g1的内容读入内存,将f1的内容存储到hash_map当中,然后再取g1中的url,若有相同的url,则写入到文件中,然后直到g1的内容读取完毕,再取g2...gk。然后再取f2的内容读入内存。。。依次类推,知道找出所有的重复url。
第二种:如果允许一定错误率的话,则可以用布隆过滤器的思想。
2.在进行网页爬虫时,其中有一个很重要的过程是重复URL的判别,如果将所有的url存入到数据库中,当数据库中URL的数量很多时,在判重时会造成效率低下,此时常见的一种做法就是利用布隆过滤器,还有一种方法是利用berkeley db来存储url,Berkeley db是一种基于key-value存储的非关系数据库引擎,能够大大提高url判重的效率。
布隆过滤器的简易版本实现:
#include<iostream>
#include<bitset>
#include<string>
#define MAX 2<<24
using namespace std;
bitset<MAX> bloomSet; //简化了由n和p生成m的过程
int seeds[7]={3, 7, 11, 13, 31, 37, 61}; //使用7个hash函数
int getHashValue(string str,int n) //计算Hash值
{
int result=0;
int i;
for(i=0;i<str.size();i++)
{
result=seeds[n]*result+(int)str[i];
if(result > 2<<24)
result%=2<<24;
}
return result;
}
bool isInBloomSet(string str) //判断是否在布隆过滤器中
{
int i;
for(i=0;i<7;i++)
{
int hash=getHashValue(str,i);
if(bloomSet[hash]==0)
return false;
}
return true;
}
void addToBloomSet(string str) //添加元素到布隆过滤器
{
int i;
for(i=0;i<7;i++)
{
int hash=getHashValue(str,i);
bloomSet.set(hash,1);
}
}
void initBloomSet() //初始化布隆过滤器
{
addToBloomSet("http://www..com");
addToBloomSet("http://www.cnblogs.com");
addToBloomSet("http://www.google.com");
}
int main(int argc, char *argv[])
{
int n;
initBloomSet();
while(scanf("%d",&n)==1)
{
string str;
while(n--)
{
cin>>str;
if(isInBloomSet(str))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
return 0;
}