MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 【讨论】java怎么登陆163邮箱,获取登陆用户的好友

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

www.MyException.Cn  网友分享于:2015-08-27  浏览:196次

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();
    }

}

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有