A. java如何发送匿名邮件
任何一个人都可以连接到SMTP服务器发送邮件,SMTP服务器大部分不检查信息的真实性.你可以随便写你喜欢用的名字,
你也可能会收到来自[email protected]的邮件,请你去参加白宫前草坪上的聚会.
也就是说,发件人的名字是你自己写进去的.你可以随便写.发件人的地址也是随便写的.所以你自己写的邮件程序,就相当于匿名的.不过你可能发不出去,另外一边的POP3服务器可能会把你的邮件当成垃圾邮件,直接过虑掉.
B. 基于布隆过滤器的非法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;
}
C. java如何获取邮箱中的发件箱,草稿箱,垃圾箱内容。
你想获取那个邮箱中的这些信息?这个是需要邮箱方进行配合的。
比如163邮箱,他们会提供一些公开接口,你可以调用这些接口来获取你想要的邮件信息。
想要同步也很简单,只要间隔很短的时间进行一次获取就可以了。
至于你要做其他处理,那就要看邮箱开放的接口是啥样的了。
如果邮箱不开放这么接口,那么你是获取不到邮件信息的。
D. JAVA发送邮件被当成垃圾邮件,怎么办
你这不是黑白名单的问题 明显是2032程序本身333有问807题。
E. java mail qq垃圾邮件
各自的邮箱都有不同的判断垃圾邮件的机制。
这个无法一句话说得清楚的,而且,一般这些规则他们都不公开的,只有靠自己的经验去摸索。一般不涉及太多广告类的关键词就没事。
研究下你发送的邮件有什么问题?是不是涉及一些关键词了?
F. 如何用 Java 利用贝叶斯算法实现垃圾邮件过滤
这个问题很有挑战性, 做看其他大佬回答
G. 垃圾邮件的主要种类
一、站点宣传
许多网友都建立了自己的个人站点,在吸引更多的网民访问的过程中,有些人不在自己站点的内容上下功夫,而是东抄一点、西拉一点,还想让站点上的计数器哗啦哗啦地涨,于是就走了偏门,给一大堆不管他们认不认识的网民狂发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发连环信又方便又省钱,垃圾信制造者真是乐此不疲,他们实在也太小瞧了广大网民的智力了。
H. 最近做毕业设计,想求一个java开发的邮件收发系统
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
Object o_cid=request.getParameter("cid");
Object o_sn=request.getParameter("sn");
if(null==o_cid||null==o_sn)return mapping.findForward("404");
Long cid=Long.valueOf(o_cid.toString());
String sn=String.valueOf(o_sn);
CompanyPswManage cpm=companyPswManageService.findById(cid);
if(null==cpm||!sn.equals(cpm.getSn()))return mapping.findForward("404");
request.getSession().setAttribute("cpm",cpm);
// ���ȡ���ͼƬ
String URL=null;
List<CompanyAd> listAD = new ArrayList<CompanyAd>();
// A��
listAD = companyAdService.findCompanyAdByType("A", 1);
if(listAD!=null&&listAD.size()>0){
URL=listAD.get(0).getUrl();
request.getSession().setAttribute("A_url", URL);
request.getSession().setAttribute("A_cid", listAD.get(0).getCid());
}else{
request.getSession().setAttribute("A_url", "");
request.getSession().setAttribute("A_cid", 0);
}
// B��
listAD = companyAdService.findCompanyAdByType("B", 1);
if(listAD!=null&&listAD.size()>0){
URL=listAD.get(0).getUrl();
request.getSession().setAttribute("B_url", URL);
request.getSession().setAttribute("B_cid", listAD.get(0).getCid());
}else{
request.getSession().setAttribute("B_url", "");
request.getSession().setAttribute("B_cid", 0);
}
// C��(���ȡ6��)
listAD = companyAdService.findCompanyAdByType("C", 6);
request.getSession().setAttribute("C_list",listAD);
// D��(ȡ8��)
listAD = companyAdService.findCompanyAdByType("D", 8);
request.getSession().setAttribute("D_list", listAD);
List<CompanyProfile> cplist = new ArrayList<CompanyProfile>();
if(listAD!=null&&listAD.size()>0){
//ȡ��˾
for(int i=0;i<listAD.size();i++){
Long ccid = listAD.get(i).getCid();
CompanyProfile cp = companyProfileService.findById(ccid);
cplist.add(cp);
}
request.getSession().setAttribute("cplist",cplist);
}
// E��
listAD = companyAdService.findCompanyAdByType("E", 1);
request.getSession().setAttribute("E_list", listAD);
return mapping.findForward("pswRetakeConfirm");
}
public void setCompanyPswManageService(
ICompanyPswManageService companyPswManageService) {
this.companyPswManageService = companyPswManageService;
}
}
public class CompanyPswManageService implements ICompanyPswManageService {
private ICompanyPswManageDAO companyPswManageDao;
public void setCompanyPswManageDao(ICompanyPswManageDAO companyPswManageDao) {
this.companyPswManageDao = companyPswManageDao;
}
public boolean save(CompanyPswManage transientInstance){
return companyPswManageDao.save(transientInstance);
}
public boolean delete(CompanyPswManage persistentInstance){
return companyPswManageDao.delete(persistentInstance);
}
public CompanyPswManage findById(java.lang.Long id){
return companyPswManageDao.findById(id);
}
}
I. Apache软件基金会的项目
HTTP Server: 可以在UNIX,MS-Windows,Macintosh和Netware操作系统下运行的HTTP服务器的项目
Ant: 基于Java语言的构建工具,类似于C语言的Make工具。
AXIS2:Web服务(SOAP, WSDL)的处理器,基于AXIS1.X重新构建。
APR:(也就是:Apache Portable Runtime)C语言实现的便携运行库的管理工具。
Beehive:为了简单构建J2EE应用的对象模型。
Cocoon:一个基于组件技术和XML和Web应用开发框架。
DB:关于数据库管理系统的几个开源项目集合
Derby:一个纯JAVA的数据库管理系统
Drill :将有助于Hadoop用户实现更快查询海量数据集的目的
Directory:基于JAVA语言的目录服务器,支持LDAP等目录访问协议。
Excalibur:Apache Avalon项目的前身。
Forrest:一个发布系统框架的项目。
Geronimo:J2EE服务器
Gump:整合管理器
Hadoop:并行运算编程工具和分布式文件系统。
Harmony:一个兼容JAVA标准的JAVA语言的开源实现。
HiveMind:一个服务(Services)与配置(configuration)的微内核
iBATIS:一个基于JAVA语言的数据持久化框架
Incubator:为了帮助那些希望获取Apache软件基金会支持的计划进入Apache软件基金会的审核项目
Jackrabbit:内容仓库API标准(Content Repository for Java Technology API,即JSR-170)的一个开源实现项目。
Jakarta: 在ASF中,基于Java语言的一组开源子项目的集合,现在包含的子项目有:BCEL,BSF,Cactus,Commons,ECS,HttpComponents,JCS,JMeter,ORO,Regexp,Slide,Taglibs,Turbine,Velocity
James:JAVA语言实现的邮件新闻服务器
Labs:为基金会成员提供最新变更的思维的计划
Lenya:内容管理系统
Logging: 一个开发可以在C++、Java、Perl、PHP、.NET计算机语言下运行的通用日志工具项目集合。
Lucene: 高性能的,基于Java语言的全文检索项目。
Maven:项目集成构建工具
MyFaces: 一个JavaServer Faces(JSF)的实现框架。
mod_perl:为Apache服务器提供Perl语言整合的项目
POI:提供API以供JAVA程式对Microsoft Office格式档案的读/写。
Portals:与门户(Portal)技术相关的几个项目集合
Santuario:发展XML安全性方面的项目
Shale:在Struts之后,发展起来基于JAVA语言Web应用框架
SpamAssassin:垃圾邮件过滤器
Struts: 一个基于J2EE平台的MVC设计模式的Web应用框架
Subversion: 一个软件版本管理系统。
Tapestry: 另一个J2EE平台的、能产生动态、高性能Web应用的框架。
TCL:为Apache服务器提供Tcl语言整合的项目
Tomcat: 一个运行Java Servlet与JavaServer Pages(JSP)的容器。
Web Services:与Web Services技术相关的项目集合
Xalan:XML转换处理器
Xerces: 一组可以在Java,C++,Perl计算机语言下使用的XML解析器项目。
Apache XML:XML解决方案
XMLBeans:基于JAVA语言XML对象绑定工具
XML Graphics:发展XML与图形进行转换的计划项目
J. 为什么我的javamail程序发送的都是垃圾邮件
你的发信邮件是什么呢?
如果平时发了很多垃圾邮件. 就会被其他服务商拉入到黑名单的.
比如你可以看到许多邮箱有垃圾邮件举报功能.