java HttpClient 抓取页面 发送邮件

这两天编辑部要求做个健康网上调查,将用户填写的信息发到指定的邮箱,调查信息内容是蛮大的,所以先设置个模板页面(JSP),用于发送邮箱显示用,然后通过用户的请求request.getQueryString()来获取提交的参数及值,再将它传回到模板中,想到用HttpClient来抓取模板页面HTML源码;再发送到指定的邮箱;
1、根据请求得到参数和值;如:name=qyj&age=28
String query=req.getQueryString();

2、 将参数传回模板,用于发送到邮箱用的HTML,再用httpClient 来抓取
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod("../js/mailContent.jsp?"+query);
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
byte[] responseBody = getMethod.getResponseBody();
str=new String(responseBody,"UTF-8");//内容体编码

3、发送邮件
public String sendEmail(String str){
if(str.indexOf("null")>0)
str=str.replaceAll("null", " ");
String returnInfo="";
String tto="wu945@126.com";//
String ttitle="健康调表";
String tcontent=str;
Properties props=new Properties();
props.put("mail.smtp.host","smtp.126.com");
props.put("mail.smtp.auth","true");
Session s=Session.getInstance(props);
s.setDebug(true);

MimeMessage message=new MimeMessage(s);

// 给消息对象设置发件人/收件人/主题/发信时间
try{
InternetAddress from=new InternetAddress("t1717g@126.com");
message.setFrom(from);
InternetAddress to=new InternetAddress(tto);
message.setRecipient(Message.RecipientType.TO,to);
message.setSubject(ttitle);
message.setSentDate(new Date());


// 给消息对象设置内容
BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
mdp.setContent(tcontent,"text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式
Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
message.setContent(mm);//把mm作为消息对象的内容
message.saveChanges();
Transport transport=s.getTransport("smtp");
transport.connect("smtp.126.com","t1717g","123456.hz");
transport.sendMessage(message,message.getAllRecipients());
transport.close();
System.out.println("发送成功!");
returnInfo="success";
}catch (Exception e){
e.printStackTrace();
// TODO: handle exception
}
return returnInfo;
}
一开始是想用什么技术直接提取调查用的界面发到邮箱,但是图片啊,样式啊,主要是用户填写的信息不能直接获得,于是罢了;
其次,碰到的最大的问题就是编码问题,又编写了sevlet请求时的编码过滤

public void doFilter(ServletRequest req, ServletResponse rep,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)req;
request.setCharacterEncoding("UTF-8");
HttpServletResponse respones = (HttpServletResponse)rep;
respones.setContentType("text/html;charset=UTF-8");
filterChain.doFilter(request, respones);
}
不过得在web.xml中配置下
<filter>
<filter-name>encodeFilter</filter-name>
<filter-class>com.juhe.yibao.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/jsp/mailContent.jsp</url-pattern>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.支持发送邮件和远端文件下载两个功能Demo,环境MyEclipse 6.0.1+jdk1.6 2.import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class SearchDomain { public static void main(String[] args) throws ClientProtocolException, IOException { //实例化一个HttpClient HttpClient httpClient = new DefaultHttpClient(); //设定目标站点 web的默认端口80可以不写的 当然如果是其它端口就要标明 HttpHost httpHost = new HttpHost("127.0.0.1",80); //设置需要下载的文件 HttpGet httpGet = new HttpGet("/fax/temp/284/201205171022522920.doc"); //这里也可以直接使用httpGet的绝对地址,当然如果不是具体地址不要忘记/结尾 //HttpGet httpGet = new HttpGet("http://www.0431.la/"); //HttpResponse response = httpClient.execute(httpGet); HttpResponse response = httpClient.execute(httpHost, httpGet); if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){ //请求成功 //取得请求内容 HttpEntity entity = response.getEntity(); //显示内容 if (entity != null) { //这里可以得到文件的类型 如image/jpg /zip /tiff 等等 但是发现并不是十分有效,有时明明后缀是.rar但是取到的是null,这点特别说明 System.out.println(entity.getContentType()); //可以判断是否是文件数据流 System.out.println(entity.isStreaming()); //设置本地保存的文件 File storeFile = new File("e:/111.doc"); FileOutputStream output = new FileOutputStream(storeFile); //得到网络资源并写入文件 InputStream input = entity.getContent(); byte b[] = new byte[1024]; int j = 0; while( (j = input.read(b))!=-1){ output.write(b,0,j); } output.flush(); output.close(); } if (entity != null) { entity.consumeContent(); } } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值