首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

【讨论】java怎么登陆163邮箱,获取登陆用户的好友列表

2012-01-24 
【讨论】java如何登陆163邮箱,获取登陆用户的好友列表java如何登陆163邮箱,获取登陆用户的好友列表我最近准

【讨论】java如何登陆163邮箱,获取登陆用户的好友列表
java如何登陆163邮箱,获取登陆用户的好友列表

我最近准备做个类似程序,希望大家讨论讨论,
有意见的提意见,要是有实现源码的分享一下(高分答谢),研究一下!

分大家不用愁!

[解决办法]
不会-_-!关注中
[解决办法]
关注,也希望更多人关注
[解决办法]

探讨
没有解决方案,没有火爆的讨论,连个自己的想法都没有,凭什么成为了“推荐”贴?

[解决办法]
首先。。我感觉吧。。应该有163提供一个接口吧??
貌似javamail中也没有这个获取好友的方法啊。 
我感觉,这个应该跟服务器的提供商有关系。。
[解决办法]
关注,学习
[解决办法]
UP关注
[解决办法]
我想应该是把你邮箱的用户和密码通过post方式提交到相应的url,登陆后,找到邮箱中你记录的邮箱地址(得到的是html的源代码,找到里面的邮箱的信息,用httpclient或jdk提供的URL类实现)
你可以参考下最近流行的SNS网站,类似开心和校内。国外的facebook已经开源了,可以看看里面的实现


[解决办法]
探讨
首先。。我感觉吧。。应该有163提供一个接口吧??
貌似javamail中也没有这个获取好友的方法啊。
我感觉,这个应该跟服务器的提供商有关系。。

[解决办法]
探讨
我想应该是把你邮箱的用户和密码通过post方式提交到相应的url,登陆后,找到邮箱中你记录的邮箱地址(得到的是html的源代码,找到里面的邮箱的信息,用httpclient或jdk提供的URL类实现)
你可以参考下最近流行的SNS网站,类似开心和校内。国外的facebook已经开源了,可以看看里面的实现

[解决办法]
模拟浏览器当然可以,但是就比较..
[解决办法]

[解决办法]
对这一块不了解,支持了。
[解决办法]
貌似163屏蔽了
[解决办法]
学习,关注一下!呵呵。。
[解决办法]
其实这样的东西在qq上面是有这样的功能,好像是获取用户的信息后直接打开的是163的信箱的布面。
[解决办法]
挺新鲜的哦,获得好友列表哦,只能登入之后,找到那个html页面,然后看看html parse出来。
等待你的结果
[解决办法]
这个问题嘛,其实也不难的,不过要用java写一个登陆163邮箱的客户端出来的话,前提是你的163邮箱开通了POP3服务哦,一般来说,如果你的163邮箱是在2006年一起注册的,哪么会自动开启这个服务的,反之,就得自己花钱开通了。原理都挺简单的,不过需要借助两个jar包:activation.jar和mail.jar。至于源代码呢,我可以贴给你参看一下,不过代码中设置的服务器是QQ邮箱的服务器,你只需要把“smtp.qq.com”改成“smtp.163.com”就可以了。代码需要自己倍加调试,仅作参考哦:
Java code
 
package tcpip.smtp;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;

/**
* 本程序用java来实现Email的发送,所用到的协议为:SMTP,端口号为25; <br>
* 方法:用Socket进行实现,打开客户端的Socket,并连接上服务器: <br>
* 如:Socket sockClient = new Socket("smtp.qq.com",23); <br>
* 这表示发件方连接的是QQ邮箱的服务器,端口号为23
*
*/
public class Email {

/**
* 整个MIME邮件对象
*/
private MimeMessage mimeMsg;
/**
* 专门用来发送邮件的Session会话
*/
private Session session;
/**
* 封装邮件发送时的一些配置信息的一个属性对象
*/
private Properties props;
/**
* 发件人的用户名
*/
private String username;
/**
* 发件人的密码
*/


private String password;
/**
* 用来实现附件添加的组件
*/
private Multipart mp;

/**
* 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化""
*
* @param smtp
*      SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",163为:"smtp.163.com"
*/
public Email(String smtp) {
username = "";
password = "";
// 设置邮件服务器
setSmtpHost(smtp);
// 创建邮件
createMimeMessage();
}

/**
* 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。
* 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机);
*
* @param hostName
*/
public void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.smtp.host = " + hostName);
if (props == null)
props = System.getProperties();
props.put("mail.smtp.host", hostName);
}

/**
* (这个Session类代表JavaMail 中的一个邮件session. 每一个基于
* JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中,
* Session对象需要知道用来处理邮件的SMTP 服务器。
*/
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
// 用props对象来创建并初始化session对象
session = Session.getDefaultInstance(props, null);
} catch (Exception e) {
System.err.println("获取邮件会话对象时发生错误!" + e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try {
// 用session对象来创建并初始化邮件对象
mimeMsg = new MimeMessage(session);
// 生成附件组件的实例
mp = new MimeMultipart();
} catch (Exception e) {
System.err.println("创建MIME邮件对象失败!" + e);
return false;
}
return true;
}

/**
* 设置SMTP的身份认证
*/
public void setNeedAuth(boolean need) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties();
if (need)
props.put("mail.smtp.auth", "true");
else
props.put("mail.smtp.auth", "false");
}

/**
* 进行用户身份验证时,设置用户名和密码
*/
public void setNamePass(String name, String pass) {
System.out.println("程序得到用户名与密码");
username = name;
password = pass;
}

/**
* 设置邮件主题
*
* @param mailSubject
* @return
*/
public boolean setSubject(String mailSubject) {
System.out.println("设置邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
} catch (Exception e) {
System.err.println("设置邮件主题发生错误!");
return false;
}
return true;
}

/**
* 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8
*
* @param mailBody
* @return
*/
public boolean setBody(String mailBody) {
try {
System.out.println("设置邮件体格式");
BodyPart bp = new MimeBodyPart();
bp.setContent(
" <meta http-equiv=Content-Type content=text/html; charset=UTF-8>"
+ mailBody, "text/html;charset=UTF-8");
// 在组件上添加邮件文本
mp.addBodyPart(bp);
} catch (Exception e) {
System.err.println("设置邮件正文时发生错误!" + e);
return false;
}
return true;
}

/**
* 增加发送附件
*
* @param filename
*      邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常
* @return
*/
public boolean addFileAffix(String filename) {
System.out.println("增加邮件附件:" + filename);
try {
BodyPart bp = new MimeBodyPart();
FileDataSource fileds = new FileDataSource(filename);


bp.setDataHandler(new DataHandler(fileds));

// 发送的附件前加上一个用户名的前缀
bp.setFileName(fileds.getName());

// 添加附件
mp.addBodyPart(bp);
} catch (Exception e) {
System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
return false;
}
return true;
}

/**
* 设置发件人地址
*
* @param from
*      发件人地址
* @return
*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from));
} catch (Exception e) {
return false;
}
return true;
}

/**
* 设置收件人地址
*
* @param to
*      收件人的地址
* @return
*/
public boolean setTo(String to) {
System.out.println("设置收信人");
if (to == null)
return false;
try {
mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO,
InternetAddress.parse(to));
} catch (Exception e) {
return false;
}
return true;
}

/**
* 发送附件
*
* @param copyto
* @return
*/
public boolean setCopyTo(String copyto) {
System.out.println("发送附件到");
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,
InternetAddress.parse(copyto));
} catch (Exception e) {
return false;
}
return true;
}

/**
* 发送邮件
*
* @return
*/
public boolean sendout() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");
Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
// 真正的连接邮件服务器并进行身份验证
transport.connect((String) props.get("mail.smtp.host"), username,
password);
// 发送邮件
transport.sendMessage(mimeMsg, mimeMsg
.getRecipients(javax.mail.Message.RecipientType.TO));
System.out.println("发送邮件成功!");
transport.close();
} catch (Exception e) {
System.err.println("邮件发送失败!" + e.getMessage());
e.printStackTrace();
return false;
}
return true;
}

public static void main(String[] args) {

Email themail = new Email("smtp.qq.com");
String mailbody = "Java Mail......";

themail.setNeedAuth(true);
themail.setSubject("你好");
themail.setBody(mailbody);
themail.setTo(******);
themail.setFrom(********);
themail.addFileAffix("C:/CEPxDD0D.tmp");// 附件文件路径,例如:C:/222.jpg,*注;"/"的写法;
themail.setNamePass(*****, ******);
themail.sendout();
}

}



[解决办法]
下面再把界面贴出来,用GUI的形式登陆,好像更方便吧,嘿嘿…………仅供参考:
Java code
 
package tcpip.smtp;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
* 本程序主要以图形界面的形式来实现邮件的传送
*
*/
public class EmailGui {

JFrame f = new JFrame("******");
JTextField from = new JTextField(30);
JTextField username = new JTextField();


JPasswordField password = new JPasswordField();
JTextField to = new JTextField(30);
JTextField subject = new JTextField(30);
JTextField multipart = new JTextField(20);
JButton scan = new JButton("浏览");
JTextArea content = new JTextArea();
JButton send = new JButton("发送邮件");
JButton reset = new JButton("重新填写");
Container con = f.getContentPane();

MyAction ma = new MyAction();

public EmailGui() {
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());
JLabel lab1 = new JLabel("发件邮箱");
p1.add(lab1, BorderLayout.WEST);
p1.add(from, BorderLayout.CENTER);

JPanel p7 = new JPanel();
p7.setLayout(new BorderLayout());
JLabel lab7 = new JLabel("用户名  ");
p7.add(lab7, BorderLayout.WEST);
p7.add(username, BorderLayout.CENTER);

JPanel p8 = new JPanel();
p8.setLayout(new BorderLayout());
JLabel lab8 = new JLabel("密码");
p8.add(lab8, BorderLayout.WEST);
p8.add(password, BorderLayout.CENTER);

JPanel p9 = new JPanel();
p9.setLayout(new GridLayout(1, 2, 10, 0));
p9.add(p7);
p9.add(p8);

JPanel p2 = new JPanel();
p2.setLayout(new BorderLayout());
JLabel lab2 = new JLabel("收件邮箱");
p2.add(lab2, BorderLayout.WEST);
p2.add(to, BorderLayout.CENTER);

JPanel p3 = new JPanel();
p3.setLayout(new BorderLayout());
JLabel lab3 = new JLabel("邮件主题");
p3.add(lab3, BorderLayout.WEST);
p3.add(subject, BorderLayout.CENTER);

JPanel p4 = new JPanel();
p4.setLayout(new BorderLayout());
JLabel lab4 = new JLabel("添加附件");
p4.add(lab4, BorderLayout.WEST);
p4.add(scan, BorderLayout.EAST);
p4.add(multipart, BorderLayout.CENTER);

JPanel p5 = new JPanel();
p5.setLayout(new FlowLayout());
p5.add(send);
p5.add(reset);

JPanel p6 = new JPanel();
p6.setLayout(new GridLayout(5, 1));
p6.add(p1);
p6.add(p9);
p6.add(p2);
p6.add(p3);
p6.add(p4);
p6.setBorder(BorderFactory.createTitledBorder("请填写邮件发送参数"));

content.setBorder(BorderFactory.createTitledBorder("邮件正文"));
con.setLayout(new BorderLayout());
con.add(p6, BorderLayout.NORTH);
con.add(content, BorderLayout.CENTER);
con.add(p5, BorderLayout.SOUTH);

scan.addActionListener(ma);
send.addActionListener(ma);
reset.addActionListener(ma);

f.setSize(new Dimension(400, 600));
f.setLocation(200, 100);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public class MyAction implements ActionListener {

public void actionPerformed(ActionEvent e) {
if (e.getSource() == scan) {
JFileChooser chooser = new JFileChooser();
int state = chooser.showDialog(f, "请选择一个需要添加的附件");
if (state == JFileChooser.APPROVE_OPTION) {
String fileName = chooser.getSelectedFile()
.getAbsolutePath();
multipart.setText(fileName);
}
} else if (e.getSource() == send) {
Email email = new Email("smtp.qq.com");

email.setNeedAuth(true);
email.setFrom(from.getText().trim());
email.setTo(to.getText().trim());
email.setSubject(subject.getText().trim());
email.setBody(content.getText());
if(!multipart.getText().trim().equals("")){
email.addFileAffix(multipart.getText());
}
email.setNamePass(username.getText().trim(), password.getText()
.trim());



setEnabel(false);

content.append("\r\n\r\n\r\n==========================================");
content.append("\r\n邮件准备就绪");
content.append("\r\n取得发件地址");
content.append("\r\n取得收件地址");
content.append("\r\n取得邮件主题");
content.append("\r\n取得邮件文本内容");
content.append("\r\n找到附件地址");
content.append("\r\n设置用户名和密码");
content.append("\r\n\r\n邮件正在发送...");
boolean flag = email.sendout();

if (flag) {
JOptionPane.showMessageDialog(f, "邮件发送成功!");
content.append("\r\n邮件发送成功!");
setEnabel(true);
} else {
JOptionPane.showMessageDialog(f,
"邮件发送失败!\r\n请检查用户名或密码以及邮箱地址\r\n如果填写正确,请查看网络...");
content.append("\r\n邮件发送失败!");
setEnabel(true);
}
} else if (e.getSource() == reset) {
setEnabel(true);
}
}
}

public void setEnabel(boolean flag) {
from.setEditable(flag);
to.setEditable(flag);
subject.setEditable(flag);
multipart.setEditable(flag);
scan.setEnabled(flag);
username.setEditable(flag);
password.setEditable(flag);
content.setEditable(flag);
send.setEnabled(flag);
reset.setEnabled(flag);
}

/**
* @param args
*/
public static void main(String[] args) {
new EmailGui();

}

}


[解决办法]
我也做过mail,不过从没有获取过用户列表.javamail也没有提供类似的方法.
楼主要想获取用户列表,需要知道163的接口了
[解决办法]
用 HTTPClient 方式的确可以实现,个人感觉就是有些笨点 。。。
用到的jar包有 : commons-codec-1.3.jar、commons-httpclient-3.1.jar、commons-logging-1.1.1.jar这几个就可以玩了 

用 get 和 post 两种请求方式 模拟 登陆操作 ,就可以获得用户列表了 ~oo~


[解决办法]
用的是接口通讯,ajax post提交模式。
也可能是cas做的单点登陆之类的。

[解决办法]
用httpclient试一下,我回去也研究一下!
[解决办法]
用httpclient要知道登录页面的提交页面,刚无聊拼了下登录页面的URL,结果拼到visitordata.store();不知道怎么回事了,用户名等信息写到COOKIE里去了,并且没看到拼接,难道是另一个页面才取?并且发现登录后的URL都不是一样的,都随即数的
[解决办法]
曾经试过用HttpClient登录QQ邮箱,
发现密码在页面上用JAVASCRIPT写的RSA算法加密了
所以如果要模拟登录,必须得模仿JS的加密算法写一个JAVA加密算法

而且登录后,都是用的redirect,里面还有好多ajax,很难定位到自己需要的信息

所以,残念了。。。。

[解决办法]
定位的话还要看个人手段了,

找了下,得到这个邮箱通讯录获取地址在
http://tg1a95.mail.163.com/a/s?sid=ZBQfagWaSvYeYkZXBdaaiWTwkdAKqPJC&func=global:sequential
需要post提交 
sid应该是每人不同的,

返回的数据是一个json
格式如下:
{

'code':'S_OK',

'var':[{

'code':'S_OK',

'var':[{

'id':'0',

'groups':[],

'ADR;HOME':';;;;;;CI',

'EMAIL;PREF':'test121212@163.com',

'FN':'bb1'},

{

'id':'1',

'groups':[],

'ADR;HOME':';;;;;;CI',

'EMAIL;PREF':'test21212@163.com',

'FN':'bb2'}]},

{

'code':'S_OK',

'var':[]},

{

'code':'S_OK',

'var':[{

'id':'FRIENDS',

'name':'朋友',

'reserved':true},

{

'id':'FAMILY',

'name':'亲人',

'reserved':true},

{

'id':'COWORKERS',



'name':'同事',

'reserved':true},

{

'id':'NETFRIENDS',

'name':'网友',

'reserved':true},

{

'id':'RECENT',

'name':'常用联系人',

'reserved':true}]}]}

其中 
'EMAIL;PREF' 是邮箱地址
'FN' 是姓名
[解决办法]
要好友列表的话要获得页面流,然后解析html。
我不知163是否提供接口,有的话就方便了。
如果你只要收发邮件,基于pop3和smtp的话
可以参看小弟的博客http://blog.csdn.net/terryzero/archive/2008/12/13/3512276.aspx
[解决办法]
http://blog.csdn.net/terryzero/archive/2008/12/13/3512276.aspx
[解决办法]
有用。留名关注。
[解决办法]
httpclient+htmlparser这个我实现过
[解决办法]
肯定很麻烦了 留名下
[解决办法]
1987??比我还小,还在上学吧?别说你都工作1年以上了···
[解决办法]
留名。帮顶了。
[解决办法]
关注
[解决办法]
关注~
[解决办法]
不知道怎么搞 校内网的邀请有这个功能..
[解决办法]
pop3登陆,
获取所有的邮件头~
得到email列表。
[解决办法]
关注下。mark

[解决办法]
MARK!!!
[解决办法]
下学期就学JS了,我觉得用这个比较好点
[解决办法]
登陆邮箱就是用mvc弄个连接数据库,正确就登陆。简单点的话就用javaBean连接数据库来登陆。

你说的列出好友列表就是用session从你好友表的数据库中输出里面目录的名字而已。

代码吗,还是要靠自己写的。

这样猜能完全掌握。
[解决办法]
留名关注。
[解决办法]
关注
[解决办法]
关注
[解决办法]

探讨
不会-_-!关注中

[解决办法]
感觉这个问题不是简单的几个GET跟POST就能解决了。
你先要知道那个好友列表的数据到底是哪里来的,邮箱里面全是AJAX,看着头都晕了。firebug了半天都没找到那个数据到底是哪里来的。
还有模拟登陆完以后如何保持SESSION啊?
[解决办法]
获取邮箱联系人测试
http://www.kxons.com/GetContacts.aspx
利用HTTP协议获取163的联系人列表
http://blog.csdn.net/jaytse/archive/2008/12/05/3452981.aspx
[解决办法]
通过HTTP协议登陆,分析网页源码。一般邮箱用https,大量运用ajax动态加载。所以调用浏览器登陆
[解决办法]
httpclient应该不可行,ajax,javascript事件驱动不好解决,还是直接调用浏览器吧。
[解决办法]
<?php
$cookie_jar = tempnam('./tmp','cookie');
$cookie_jar2 = tempnam('./tmp','cookie2');
$cookie_jar3 = tempnam('./tmp','cookie3');
$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, 'http://reg.163.com/login.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D16');
curl_setopt($ch, CURLOPT_POST, 1);
$request = 'verifycookie=1&username='.$_POST['username'].'&password='.$_POST['password'].'&selType=jy&%B5%C7%C2%BC%D3%CA%CF%E4=%B5%C7%C2%BC%D3%CA%CF%E4&style=16&product=mail163';
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
//把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
//设定返回的数据是否自动显示
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//设定是否显示头信息
curl_setopt($ch, CURLOPT_HEADER, false);
//设定是否输出页面内容
curl_setopt($ch, CURLOPT_NOBODY, false);
$html=curl_exec($ch);
curl_close($ch);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=16&username='.$_POST['username']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar2);
$html=curl_exec($ch);
curl_close($ch);

//echo $name;

$find1 = 'sid=';
$find2 = '">here';
$pos1 = strpos($html, $find1);
$pos2 = strpos($html, $find2);
$l=$pos2-$pos1-4;
//echo substr($html, $pos1+4,$l);
$sess=substr($html, $pos1+4,$l);

$ch2 = curl_init();
//curl_setopt($ch2, CURLOPT_URL, 'http://mail3-13.sinamail.sina.com.cn/cgismarty/addr_member_list.php');
curl_setopt($ch2, CURLOPT_URL, 'http://g1a5.mail.163.com/coremail/fcg/ldvcapp?funcid=address&sid='.$sess.'&tempname=address%2Faddress.htm&ifirstv=&listnum=0&showlist=all');

curl_setopt($ch2, CURLOPT_HEADER, false);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar2);
$html = curl_exec($ch2);
$html=str_replace("\n","",$html); 


curl_close($ch2);
preg_match_all('/<!-- 修改 -->(.*?)<\/td>/',$html,$name1);
preg_match_all('/<!-- 发信 -->(.*?)<\/a>/',$html,$name2);
  
SESSION_START();
header("Content-Type: application/xml; charset=UTF-8");
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('msns');
foreach($name2[0] as $key=>$value) {
$child = $dom->createElement('msn');
$child->setAttribute('account',strip_tags($name2[0][$key]));
$child->setAttribute('nickname',strip_tags($name1[0][$key]));
$root->appendChild($child);
};
$dom->appendChild($root);
echo $dom->saveXML();

?>

这是php读取163好友列表的代码,看看有没帮助
[解决办法]

Java code
package tcpip.smtp;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.*;/** * 本程序用java来实现Email的发送,所用到的协议为:SMTP,端口号为25;<br> * 方法:用Socket进行实现,打开客户端的Socket,并连接上服务器:<br> * 如:Socket sockClient = new Socket("smtp.qq.com",23);<br> * 这表示发件方连接的是QQ邮箱的服务器,端口号为23 *  */public class Email {    /**     * 整个MIME邮件对象     */    private MimeMessage mimeMsg;    /**     * 专门用来发送邮件的Session会话     */    private Session session;    /**     * 封装邮件发送时的一些配置信息的一个属性对象     */    private Properties props;    /**     * 发件人的用户名     */    private String username;    /**     * 发件人的密码     */    private String password;    /**     * 用来实现附件添加的组件     */    private Multipart mp;    /**     * 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化""     *      * @param smtp     *            SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",163为:"smtp.163.com"     */    public Email(String smtp) {        username = "";        password = "";        // 设置邮件服务器        setSmtpHost(smtp);        // 创建邮件        createMimeMessage();    }    /**     * 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。     * 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机);     *      * @param hostName     */    public void setSmtpHost(String hostName) {        System.out.println("设置系统属性:mail.smtp.host = " + hostName);        if (props == null)            props = System.getProperties();        props.put("mail.smtp.host", hostName);    }    /**     * (这个Session类代表JavaMail 中的一个邮件session. 每一个基于     * JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中,     * Session对象需要知道用来处理邮件的SMTP 服务器。     */    public boolean createMimeMessage() {        try {            System.out.println("准备获取邮件会话对象!");            // 用props对象来创建并初始化session对象            session = Session.getDefaultInstance(props, null);        } catch (Exception e) {            System.err.println("获取邮件会话对象时发生错误!" + e);            return false;        }        System.out.println("准备创建MIME邮件对象!");        try {            // 用session对象来创建并初始化邮件对象            mimeMsg = new MimeMessage(session);            // 生成附件组件的实例            mp = new MimeMultipart();        } catch (Exception e) {            System.err.println("创建MIME邮件对象失败!" + e);            return false;        }        return true;    }    /**     * 设置SMTP的身份认证     */    public void setNeedAuth(boolean need) {        System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);        if (props == null)            props = System.getProperties();        if (need)            props.put("mail.smtp.auth", "true");        else            props.put("mail.smtp.auth", "false");    }    /**     * 进行用户身份验证时,设置用户名和密码     */    public void setNamePass(String name, String pass) {        System.out.println("程序得到用户名与密码");        username = name;        password = pass;    }    /**     * 设置邮件主题     *      * @param mailSubject     * @return     */    public boolean setSubject(String mailSubject) {        System.out.println("设置邮件主题!");        try {            mimeMsg.setSubject(mailSubject);        } catch (Exception e) {            System.err.println("设置邮件主题发生错误!");            return false;        }        return true;    }    /**     * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8     *      * @param mailBody     * @return     */    public boolean setBody(String mailBody) {        try {            System.out.println("设置邮件体格式");            BodyPart bp = new MimeBodyPart();            bp.setContent(                    "<meta http-equiv=Content-Type content=text/html; charset=UTF-8>"                            + mailBody, "text/html;charset=UTF-8");            // 在组件上添加邮件文本            mp.addBodyPart(bp);        } catch (Exception e) {            System.err.println("设置邮件正文时发生错误!" + e);            return false;        }        return true;    }    /**     * 增加发送附件     *      * @param filename     *            邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常      * @return     */    public boolean addFileAffix(String filename) {        System.out.println("增加邮件附件:" + filename);        try {            BodyPart bp = new MimeBodyPart();            FileDataSource fileds = new FileDataSource(filename);            bp.setDataHandler(new DataHandler(fileds));            // 发送的附件前加上一个用户名的前缀            bp.setFileName(fileds.getName());            // 添加附件            mp.addBodyPart(bp);        } catch (Exception e) {            System.err.println("增加邮件附件:" + filename + "发生错误!" + e);            return false;        }        return true;    }    /**     * 设置发件人地址     *      * @param from     *            发件人地址     * @return     */    public boolean setFrom(String from) {        System.out.println("设置发信人!");        try {            mimeMsg.setFrom(new InternetAddress(from));        } catch (Exception e) {            return false;        }        return true;    }    /**     * 设置收件人地址     *      * @param to     *            收件人的地址     * @return     */    public boolean setTo(String to) {        System.out.println("设置收信人");        if (to == null)            return false;        try {            mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO,                    InternetAddress.parse(to));        } catch (Exception e) {            return false;        }        return true;    }    /**     * 发送附件     *      * @param copyto     * @return     */    public boolean setCopyTo(String copyto) {        System.out.println("发送附件到");        if (copyto == null)            return false;        try {            mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,                    InternetAddress.parse(copyto));        } catch (Exception e) {            return false;        }        return true;    }    /**     * 发送邮件     *      * @return     */    public boolean sendout() {        try {            mimeMsg.setContent(mp);            mimeMsg.saveChanges();            System.out.println("正在发送邮件....");            Session mailSession = Session.getInstance(props, null);            Transport transport = mailSession.getTransport("smtp");            // 真正的连接邮件服务器并进行身份验证            transport.connect((String) props.get("mail.smtp.host"), username,                    password);            // 发送邮件            transport.sendMessage(mimeMsg, mimeMsg                    .getRecipients(javax.mail.Message.RecipientType.TO));            System.out.println("发送邮件成功!");            transport.close();        } catch (Exception e) {            System.err.println("邮件发送失败!" + e.getMessage());            e.printStackTrace();            return false;        }        return true;    }    public static void main(String[] args) {        Email themail = new Email("smtp.qq.com");        String mailbody = "Java Mail......";        themail.setNeedAuth(true);        themail.setSubject("你好");        themail.setBody(mailbody);        themail.setTo(******);        themail.setFrom(********);        themail.addFileAffix("C:/CEPxDD0D.tmp");// 附件文件路径,例如:C:/222.jpg,*注;"/"的写法;        themail.setNamePass(*****, ******);        themail.sendout();    }} 


[解决办法]
我写过很多邮件程序,象一般的登录邮件服务器,进行收发邮件或删除邮件等操作用javamail可以帮你解决,但楼主的需求是"获取登陆用户的好友列表" 这不是邮件服务器的标准功能,因些javamail也没有相关的功能。 所以我觉得楼上很多人说的用javamail的例子,我觉得还是达不到"获取登陆用户的好友列表"这个目的.

我认为楼主应该用另一种思路:"往网页post数据并获取网页返回的数据,然后分析返回数据,取得你想要的内容" . 这种方法可能还会有一个麻烦:如果网页需要输入验证码,你就很难用程序自动登录。 当然163的好象不用你输入验证码.

热点排行