欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java httpclient 为邮箱添加来信转发规则

发布时间:2025/7/14 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java httpclient 为邮箱添加来信转发规则 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘Python工程师标准>>>

import java.text.MessageFormat; import java.util.HashMap; import java.util.Map;import org.apache.http.Header; import org.apache.http.message.BasicHeader; import org.jsoup.Jsoup; import org.jsoup.nodes.Document;/*** 对网易yeah.net邮箱用户添加转发规则* * @since 2014-6-6 14:52:09*/ public class MailYeahTest {public static final String SESSION_INIT = "http://mail.yeah.net";public static final String LOGIN_URL = "https://mail.yeah.net/entry/cgi/ntesdoor?df=webmailyeah&from=web&funcid=loginone&iframe=1&language=-1&passtype=1&verifycookie=1&product=mailyeah&style=-1&uid=";public static final String RULE_POST_URl = "http://mail.yeah.net/js5/s?sid={0}&func=user:addMailRules";public static final String RULE_LIST_URl = "http://mail.yeah.net/js5/s?sid={0}&func=user:getMailRules&from=nav&group=options-0&id=NaN&action=click";public static final String RULE_NAME = "规则名称";public static final String FORWARD_MAIL = "你要转到的email地址";/*** @param args*/public static void main(String[] args) {HttpClientHelper hc = new HttpClientHelper(true);HttpResult lr = hc.get(SESSION_INIT);// 目的是得到 csrfToken 类似// 拼装登录信息Map<String, String> data = new HashMap<String, String>();String username ;data.put("username", username ="*******@yeah.net");data.put("savelogin", "0");data.put("url2", "http://mail.yeah.net/errorpage/err_yeah.htm");data.put("password", "********");lr = hc.post(LOGIN_URL, data,setHeader());// 执行登录Document doc = Jsoup.parse(lr.getHtml());System.out.println("doc========"+doc);String sessionId=doc.select("script").html().split("=")[2];sessionId = sessionId.substring(0,sessionId.length()-2);System.out.println("sessionId=========="+sessionId);//查询用户的来来信列表中是否包含“***”字样  有则不再进行转发规则的添加data.clear();data.put("var", "<?xml version=\"1.0\"?><object/>");lr = hc.post(MessageFormat.format(RULE_LIST_URl, sessionId),data, setHeaderTORuleList(sessionId));//转发if(!lr.getHtml().contains(RULE_NAME)){data.clear();               data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">我是好人</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));data.clear();data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">你是坏人</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));data.clear();data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">呵呵</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));}System.out.println(lr.getHtml()); //响应信息}public static Header[] setHeader() {Header[] result = {new BasicHeader("User-Agent","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Accept-Language","zh-CN"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Host","mail.yeah.net"),new BasicHeader("Referer","http://mail.yeah.net/"),new BasicHeader("Accept","text/html, application/xhtml+xml, */*")};return result;}public static Header[] setHeaderTORulePost(String sessionId) {Header[] result = {new BasicHeader("Host","mail.yeah.net"),new BasicHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"),new BasicHeader("Accept","text/javascript"),new BasicHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),new BasicHeader("Referer","http://mail.yeah.net/js5/main.jsp?sid="+sessionId+"&df=webmailyeah"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Pragma","no-cache"),new BasicHeader("Cache-Control","no-cache")};return result;}public static Header[] setHeaderTORuleList(String sessionId) {Header[] result = {new BasicHeader("Host","mail.yeah.net"), new BasicHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"),new BasicHeader("Accept","text/javascript"),new BasicHeader("Accept-Language","zh-CN"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8"),new BasicHeader("Referer","http://mail.yeah.net/js5/main.jsp?sid="+sessionId+"&df=webmailyeah"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Pragma","no-cache"),new BasicHeader("Cache-Control","no-cache")};return result;} }----------------------------------------------------------------------------------------------- import java.io.IOException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map;import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager;import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; /*** HttpClient 封装** @author bangis.wangdf*/ public class HttpClientHelper {private HttpClient       httpclient       = new DefaultHttpClient();private HttpContext      localContext     = new BasicHttpContext();private BasicCookieStore basicCookieStore = new BasicCookieStore();                          // cookie存储用来完成登录后记录相关信息private int              TIME_OUT         = 3;                                              // 连接超时时间public HttpClientHelper() {instance();}/*** 启用cookie存储*/private void instance() {httpclient.getParams().setIntParameter("http.socket.timeout", TIME_OUT * 1000);localContext.setAttribute("http.cookie-store", basicCookieStore);// Cookie存储}/*** @param ssl boolean=true 支持https网址,false同默认构造*/public HttpClientHelper(boolean ssl) {instance();if (ssl) {try {X509TrustManager tm = new X509TrustManager() {public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {}public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}};SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, new TrustManager[] { tm }, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx);ClientConnectionManager ccm = httpclient.getConnectionManager();SchemeRegistry sr = ccm.getSchemeRegistry();sr.register(new Scheme("https", ssf, 443));} catch (Exception e) {e.printStackTrace();}}}/*** @param url* @param headers 指定headers* @return*/public HttpResult get(String url, Header... headers) {HttpResponse response;HttpGet httpget = new HttpGet(url);if (headers != null) {for (Header h : headers) {httpget.addHeader(h);}} else {// 如不指定则使用默认Header header = new BasicHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)");httpget.addHeader(header);}HttpResult httpResult = HttpResult.empty();try {response = httpclient.execute(httpget, localContext);httpResult = new HttpResult(localContext, response);} catch (IOException e) {httpget.abort();}return httpResult;}public HttpResult post(String url, Map<String, String> data, Header... headers) {HttpResponse response;HttpPost httppost = new HttpPost(url);String contentType = null;if (headers != null) {int size = headers.length;for (int i = 0; i < size; ++i) {Header h = (Header) headers[i];if (!(h.getName().startsWith("$x-param"))) {httppost.addHeader(h);}if ("Content-Type".equalsIgnoreCase(h.getName())) {contentType = h.getValue();}}}if (contentType != null) {httppost.setHeader("Content-Type", contentType);} else if (data != null) {httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");}List<NameValuePair> formParams = new ArrayList<NameValuePair>();for (String key : data.keySet()) {formParams.add(new BasicNameValuePair(key, (String) data.get(key)));}HttpResult httpResult = HttpResult.empty();try {UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");httppost.setEntity(entity);response = httpclient.execute(httppost, localContext);httpResult = new HttpResult(localContext, response);} catch (IOException e) {httppost.abort();} finally {}return httpResult;}public String getCookie(String name, String... domain) {String dm = "";if (domain != null && domain.length >= 1) {dm = domain[0];}for (Cookie c : basicCookieStore.getCookies()) {if (StringUtils.equals(name, c.getName()) && StringUtils.equals(dm, c.getDomain())) {return c.getValue();}}return null;}public void pringCookieAll() {for (Cookie c : basicCookieStore.getCookies()) {System.out.println(c);}} }----------------------------------------------------------------------------------------------- import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream;import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager;import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.cookie.Cookie; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; /*** 对HttpClient返回的结果进一步封装* @author bangis.wangdf**/ public class HttpResult {private static Pattern headerCharsetPattern = Pattern.compile("charset=((gb2312)|(gbk)|(utf-8))", 2);private static Pattern pattern = Pattern.compile("<meta[^>]*content=(['\"])?[^>]*charset=((gb2312)|(gbk)|(utf-8))\\1[^>]*>",2);private String headerCharset;private String headerContentType;private String headerContentEncoding;private List<Header> headers;private String metaCharset;private byte[] response;private String responseUrl;private int statuCode = -1;private static final int BUFFER_SIZE = 4096;public static HttpResult empty() {return new HttpResult();}public String getHeaderCharset() {return this.headerCharset;}public String getHeaderContentType() {return this.headerContentType;}public final List<Header> getHeaders() {return this.headers;}public String getHtml() {try {return getText();} catch (UnsupportedEncodingException e) {}return "";}public String getHtml(String encoding) {try {return getText(encoding);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return "";}public String getMetaCharset() {return this.metaCharset;}public byte[] getResponse() {return Arrays.copyOf(this.response, this.response.length);}public String getResponseUrl() {return this.responseUrl;}public int getStatuCode() {return this.statuCode;}public String getText() throws UnsupportedEncodingException {return getText("");}public String getText(String encoding) throws UnsupportedEncodingException {if (this.response == null){return "";}String encodingStr = encoding;if (StringUtils.isBlank(encoding)){encodingStr = this.metaCharset;}if (StringUtils.isBlank(encoding)){encodingStr = this.headerCharset;}if (StringUtils.isBlank(encoding)){encodingStr = "UTF-8";}return new String(this.response, encodingStr);}private String getCharsetFromMeta() {StringBuilder builder = new StringBuilder();String charset = "";for (int i = 0; (i < this.response.length) && ("".equals(charset)); ++i) {char c = (char) this.response[i];switch (c) {case '<':builder.delete(0, builder.length());builder.append(c);break;case '>':if (builder.length() > 0){builder.append(c);}String meta = builder.toString();if (meta.toLowerCase().startsWith("<meta")){charset = getCharsetFromMeta(meta);}break;case '=':default:if (builder.length() > 0){builder.append(c);}}}return charset;}private String getCharsetFromMeta(String meta) {if (StringUtils.isBlank(meta)){return "";}Matcher m = pattern.matcher(meta);if (m.find()){return m.group(2);}return "";}private void getHttpHeaders(HttpResponse httpResponse) {String headerName = "";String headerValue = "";int index = -1;Header[] rspHeaders = httpResponse.getAllHeaders();for (int i = 0; i < rspHeaders.length; ++i) {Header header = rspHeaders[i];this.headers.add(header);headerName = header.getName();if ("Content-Type".equalsIgnoreCase(headerName)) {headerValue = header.getValue();index = headerValue.indexOf(';');if (index > 0){this.headerContentType = headerValue.substring(0, index);}Matcher m = headerCharsetPattern.matcher(headerValue);if (m.find()){this.headerCharset = m.group(1);}}if ("Content-Encoding".equalsIgnoreCase(headerName)){this.headerContentEncoding = header.getValue();}}}private void getResponseUrl(HttpContext httpContext) {HttpHost target = (HttpHost) httpContext.getAttribute("http.target_host");HttpUriRequest req = (HttpUriRequest) httpContext.getAttribute("http.request");this.responseUrl = target.toString() + req.getURI().toString();}public HttpResult(HttpContext httpContext, HttpResponse httpResponse) {this.headers = new ArrayList<Header>();this.statuCode = httpResponse.getStatusLine().getStatusCode();if (httpContext != null) {getResponseUrl(httpContext);}if (httpResponse != null) {getHttpHeaders(httpResponse);try {if (("gzip".equalsIgnoreCase(this.headerContentEncoding))|| ("deflate".equalsIgnoreCase(this.headerContentEncoding))) {GZIPInputStream is = new GZIPInputStream(httpResponse.getEntity().getContent());ByteArrayOutputStream os = new ByteArrayOutputStream();byte[] buffer = new byte[BUFFER_SIZE];int count = 0;while ((count = is.read(buffer)) > 0){os.write(buffer, 0, count);}this.response = os.toByteArray();os.close();is.close();}else{this.response = EntityUtils.toByteArray(httpResponse.getEntity());}} catch (Exception e) {e.printStackTrace();}if (this.response != null){this.metaCharset = getCharsetFromMeta();}}}private HttpResult() {} }


转载于:https://my.oschina.net/u/1052562/blog/275195

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的java httpclient 为邮箱添加来信转发规则的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。