问题描述
以下是我的send方法:packageuntitled1;importjava.io.*;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.mail.*;importjavax.mail.internet.*;importjavax.activation.*;importjava.util.Date;importjava.util.Hashtable;importjava.util.Properties;publicclassServlet1extendsHttpServlet{privatestaticfinalStringCONTENT_TYPE="text/html;charset=GB18030";//Initializeglobalvariablespublicvoidinit()throwsServletException{}//ProcesstheHTTPGetrequestpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(CONTENT_TYPE);PrintWriterout=response.getWriter();send(request,response);out.close();}//ProcesstheHTTPPostrequestpublicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}//Cleanupresourcespublicvoiddestroy(){}publicvoidsend(HttpServletRequestrequest,HttpServletResponseresponse)throwsUnsupportedEncodingException,IOException,ServletException{StringserverName;StringtoUser;StringfromUser;StringmailTitle;StringmailText;StringmailServer;StringaddFile;Stringhost;Stringuser="123456@163.com";Stringpwd="123456";host="smtp.qq.com";request.setCharacterEncoding("GBK");serverName=request.getParameter("serverName");mailServer=request.getParameter("mailServer");toUser=request.getParameter("toUser");fromUser=request.getParameter("fromUser");mailTitle=request.getParameter("mailTitle");addFile=request.getParameter("file");mailText=request.getParameter("mailText");MailBeanmb=newMailBean();mb.setServerName(serverName);mb.setMailServer(mailServer);mb.setToUser(toUser);mb.setFromUser(fromUser);mb.setMailTitle(mailTitle);mb.setAddFile(addFile);mb.setMailText(mailText);Propertiesprops=newProperties();//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)props.put("mail.smtp.host",host);//需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)props.put("mail.smtp.auth","true");//用刚刚设置好的props对象构建一个sessionSessionsession=Session.getInstance(props);//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使//用(你可以在控制台(console)上看到发送邮件的过程)session.setDebug(true);//用session为参数定义消息对象MimeMessagemessage=newMimeMessage(session);try{//加载发件人地址message.setFrom(newInternetAddress(mb.getFromUser()));//加载收件人地址message.addRecipient(Message.RecipientType.TO,newInternetAddress(mb.getToUser()));//加载标题message.setSubject(mb.getMailTitle());//向multipart对象中添加邮件的各个部分内容,包括文本内容和附件Multipartmultipart=newMimeMultipart();//设置邮件的文本内容BodyPartcontentPart=newMimeBodyPart();contentPart.setText(mb.getMailText());multipart.addBodyPart(contentPart);//添加附件//BodyPartmessageBodyPart=newMimeBodyPart();//DataSourcesource=newFileDataSource(affix);//添加附件的内容//messageBodyPart.setDataHandler(newDataHandler(source));//添加附件的标题//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码//sun.misc.BASE64Encoderenc=newsun.misc.BASE64Encoder();//messageBodyPart.setFileName("=?GBK?B?"+//enc.encode(affixName.getBytes())+"?=");//multipart.addBodyPart(messageBodyPart);//将multipart对象放到message中message.setContent(multipart);//保存邮件message.saveChanges();//发送邮件Transporttransport=session.getTransport("smtp");//连接服务器的邮箱transport.connect(host,user,pwd);//把邮件发送出去transport.sendMessage(message,message.getAllRecipients());transport.close();}catch(Exceptione){e.printStackTrace();}}}我使用此方法发送人和收件人都是163的邮箱都没有问题但使用其他邮箱的用户名就会报异常如何我应该如何解决此问题~我想使用任意邮箱收发邮件应该怎么做小白叩谢!!!!!
解决方案
解决方案二:
Authenticatorauth=newAuthenticator(){publicPasswordAuthenticationgetPasswordAuthentication(){returnnewPasswordAuthentication(username,password);}});Sessionsession=Session.getInstance(props,auth);试下