试了一下用java来发邮件,竟然可以那么简单就能冒充别人,邮件协议真的是不安全。
下面说一下过程:
想用java发邮件,必须有一个mail.jar 的包,在netbeans里添加一个库就叫mail 吧,把那个jar添加到库里,这样以后就可以直接添加这个库了。
在项目里这个库。
import javax.mail.*; import java.util.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;
javamail首先需要连接服务器,要用到 Session 这个类,
Session.getInstance([Properties]);
其中properties 存放的是键值对,用 put 方法把连接信息放进去,主要有服务器地址、用户名,如:
String host = "127.0.0.1"; ps.put("mail.stmp.host",host); //如果需要验证 props.setProperty("mail.smtp.host", "smtp.sina.com"); props.setProperty("mail.smtp.user", "txc........"); props.setProperty("mail.smtp.auth", "true");
如果设置了验证当然要提供密码了,比如想让你的新浪邮件发信,先让设置新浪邮箱把协议打开。然后,Session要这样取得:
Session session = Session.getDefaultInstance(props, auth);
其中auth 是 Authenticator 类,来包含用户名和密码。它需要重载一个方法(也许session通过这个方法来取得密码)
Authenticator auth = new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "......"); }
这样就建立连接了,然后用 Message 类来产生一个邮件,
Message msg = new MimeMessage(session);
然后填写这个邮件的信息
msg.setFrom(new InternetAddress("[email protected]")); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]") ); msg.setSubject("你好,同学!"); msg.setSentDate(new Date()); msg.setText(msgText);
mesgText里面存着邮件的正文。但是发现了没,setfrom可以随便写发信人地址,我就把我们学校的图书馆地址写到这里面,给所有同学发了一个“注销图书卡”的信……太坏了……
//worldterminator 原处,转载请注明此处
好了现在把它发出去!
Transport.send(msg);
刚才说到可以连接本地邮件服务器,只要把 host 地址改成"127.0.0.1"就行了,用户名密码都省了。但是需要建一个服务器,我用的是argooft mail server(老师教的,非原创),配置里面注意改一下DNS Server 就行了。
服务器建好了,狂发垃圾邮件吧^_^
附件里带有mail.jar包和mail server