歡迎您光臨本站 註冊首頁

如何使用JSP來發送郵件

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  們每次發信都要先進入郵箱,然後才能寫信.突然一天我的郵箱密碼丟了,我進不了郵件了,那可不可以不進郵箱就能給朋友發信呢?現在我告訴你:這是可以的!

  此程序的功能就在此,你可以把它用在論壇上,打開這個程序窗口發送郵件,你也可以把它放在你的桌面上,隨心所欲地發送郵件.當然作為一個程序員,你還可以把它拿過來分析一下,看有沒有可學知識.

  由於發送HTML類型郵件的設計思想和此類似,不在一一列出.程序源碼則分別列出.

  一.流程思路:

  二.程序源碼:

  (1) 發送文本類型信件.這種是接收者收到后打開信箱后直接顯示在郵件正文的.它主要有兩個程序: mailform.html and sendmail.jsp,另外三個程序為提交成功和不成功及發生內部錯誤的處理程序.

  mailform.html用來輸入用戶信息,然後提交表單給sendmail.jsp

  sendmail.jsp 用來處理接收信息並處理信息,發送郵件.

  <%--mailform.html 的源代碼--%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  <title>mailform.html</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  <form name="form1" method="post" action="sendmail.jsp">
  <p align="center">填寫郵件內容</p>
  <div align="center">
  <table width="75%" border="1">
  <tr>
  <td><div align="center">收件人</div></td>
  <td><div align="center">
  <input name="to" type="text" id="to" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">發件人</div></td>
  <td><div align="center">
  <input name="from" type="text" id="from" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">抄送</div></td>
  <td><div align="center">
  <input name="cc" type="text" id="cc" size="30" maxlength="100">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">暗送</div></td>
  <td><div align="center">
  <input name="bcc" type="text" id="bcc" size="30" maxlength="100">


  </div></td>
  </tr>
  <tr>
  <td><div align="center">主題</div></td>
  <td><div align="center">
  <input name="subject" type="text" id="subject" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td colspan="2"><div align="center">
  <textarea name="body" cols="40" rows="10" id="body"></textarea>
  </div></td>
  </tr>
  <tr>
  <td colspan="2"><div align="center">
  <input type="submit" name="Submit" value="發送">
  &nbsp;&nbsp;&nbsp;&nbsp;
  <input name="Reset" type="submit" id="Reset" value="清空">
  </div></td>
  </tr>
  </table>
  </div>
  <p align="center">&nbsp;</p>
  </form>
  <p align="center">&nbsp;</p>
  </body>
  </html>

  <%--sendmail.jsp 的源代碼--%>
  <%@page contentType="text/html;charset=gb2312"%>
  <%@page errorPage="errpage.jsp"%>
  <%@page import="java.util.*"%>
  <%@page import="javax.mail.*"%>
  <%@page import="javax.mail.internet.*"%>
  <%@page import="javax.activation.*"%>
  <html>
  <head>
  <title>sendmail.jsp</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  <%
  //郵件伺服器的IP地址,注意此時使用的是SMTP 郵件伺服器
  //String host="202.102.240.76";
  //獲取用戶信息
  String to=request.getParameter("to");
  String from=request.getParameter("from");
  String cc=request.getParameter("cc");
  String bcc=request.getParameter("bcc");
  //結合本程序的第一句,共同起顯示漢字體的功能
  String subject=request.getParameter("subject");
  subject = new java.lang.String(subject.getBytes("iso-8859-1"));
  //以上方法等同於以下兩句,原理相同
  //byte[] subjectTemp=request.getParameter("subject").getBytes("ISO8859_1");
  //String subject=new String(subjectTemp);
  byte[] messageTextTemp=request.getParameter("body").getBytes("ISO8859_1");
  String messageText= new String(messageTextTemp);
  boolean sessionDebug = false;
  //驗證所填寫的郵件是否正確
  if((to.trim().indexOf("@")==-1)||(to.trim().length()<5)){
  %>
  <jsp:forward page="err.jsp"/>
  <%
  }
  if((from.trim().indexOf("@")==-1)||(from.trim().length()<5)){


  %>
  <jsp:forward page="err.jsp"/>
  <%
  }
  //獲得系統屬性對象,用下兩句的任一句均可
  //Properties props = System.getProperties();
  Properties props=new Properties();
  //設置SMTP主機
  //以下一句是對任意的SMTP 郵件伺服器均可,並且有了這一句,將不用設置傳輸協議了
  props.put("mail.smtp.host", "smtp.jspinsider.com");
  //這樣將確定接收方的郵件伺服器主機,
  //props.put("mail.host",host);
  //設置郵件傳輸協議方式
  //props.put("mail.transport.protocol","smtp");
  //獲取郵件會話對象
  Session mailSession = Session.getDefaultInstance(props,null);
  mailSession.setDebug(sessionDebug);
  try{
  //創建MIME郵件對象
  Message msg = new MimeMessage(mailSession);
  //設置發信人
  msg.setFrom(new InternetAddress(from));
  //設置收信人
  InternetAddress[] addressTo = {new InternetAddress(to)};
  msg.setRecipients(Message.RecipientType.TO,addressTo);
  //設置抄送人
  if(cc.trim().length()!=0){
  InternetAddress[] addressCc = {new InternetAddress(cc)};
  msg.setRecipients(Message.RecipientType.CC,addressCc);
  }
  //設置暗送人
  if(bcc.trim().length()!=0){
  InternetAddress[] addressBcc = {new InternetAddress(bcc)};
  msg.setRecipients(Message.RecipientType.BCC,addressBcc);
  }
  msg.setSubject(subject);
  msg.setSentDate(new Date());
  msg.setText(messageText);
  //發送郵件
  Transport.send(msg);
  }
  catch(Exception ex){
  out.println("sending failed!");
  }
  %>
  <jsp:forward page="sendok.jsp"/>
  </body>
  </html>

  <%-- sendok.jsp發送成功的頁面--%>
  <%@ page contentType="text/html;charset=gb2312"%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  <title>sendok.jsp</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  <center>
  <h4>發送成功! </h4>
  <table cellspacing="2" cellpadding="2" border="1">
  <tr>
  <td> 收件人</td><td><%=request.getParameter("to")%></td>
  </tr>
  <tr>
  <td>主題:</td><td><%byte[]
  subjectTemp=request.getParameter("subject").getBytes("ISO8859_1");
  String subject =new String(subjectTemp);
  out.println(subject);
  %>
  </tr>
  <tr>
  <td colspan = "2" align=center><a href ="mailform.html" style="color:rgb(ff,0,0)">


  繼續發送</a>
  </td>
  </tr>
  </table>
  </center>
  </body>
  </html>

  <%- errpage.jsp發生內部錯誤的程序---%>
  <html>
  <head>
  <title>errpage.jsp</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  出現內部錯誤
  </body>
  </html>

  <%-- err.jsp 輸入有誤時的錯誤提示----%>
  <html>
  <head>
  <title>err.jsp</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  輸入非法
  </body>
  </html>

  (2)HTML類型信件.這種郵件是作為附件接收,收到后把附件打開時是HTML文件.你寫入的信件正文在附件的HTML文件里.這個程序主要有兩個文件form.html and send.jsp .form.html 用來輸入信息表單,send.jsp用作接收信息並處理信息和發送郵件.但這個程序要用到java程序來處理髮送.HTML.java 用作發送郵件時調用的,StringDataSource.Java用作漢字顯示處理時調用的,注意使用這兩個文件時要放在對應的WEB-INF/classes 文件夾下.

  <!--form.html-->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  <title>mailform.html</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  </head>
  <body>
  <form name="form1" method="post" action="send.jsp">
  <p align="center">填寫郵件內容</p>
  <div align="center">
  <table width="75%" border="1">
  <tr>
  <td><div align="center">SMTP主機:</div></td>
  <td><div align="center">
  <input tabindex="text" name="smtp" size="30">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">收件人</div></td>
  <td><div align="center">
  <input name="to" type="text" id="to" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">發件人</div></td>
  <td><div align="center">
  <input name="from" type="text" id="from" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">抄送</div></td>


  <td><div align="center">
  <input name="cc" type="text" id="cc" size="30" maxlength="100">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">暗送</div></td>
  <td><div align="center">
  <input name="bcc" type="text" id="bcc" size="30" maxlength="100">
  </div></td>
  </tr>
  <tr>
  <td><div align="center">主題</div></td>
  <td><div align="center">
  <input name="subject" type="text" id="subject" size="30" maxlength="30">
  </div></td>
  </tr>
  <tr>
  <td colspan="2"><div align="center">
  <textarea name="body" cols="40" rows="10" id="body"></textarea>
  </div></td>
  </tr>
  <tr>
  <td colspan="2"><div align="center">
  <input type="submit" name="Submit" value="發送">
  &nbsp;&nbsp;&nbsp;&nbsp;
  <input name="Reset" type="submit" id="Reset" value="清空">
  </div></td>
  </tr>
  </table>
  </div>
  <p align="center">&nbsp;</p>
  </form>
  <p align="center">&nbsp;</p>
  </body>
  </html>

  <!—send.jsp-->
  <%@page errorPage="errpage.jsp"%>
  <%
  //變數聲明
  java.lang.String smtp,from,to,cc,bcc,subject,body;
  //獲得用戶輸入數據
  smtp = request.getParameter("smtp");
  from = request.getParameter("from");
  to = request.getParameter("to");
  cc = request.getParameter("cc");
  bcc = request.getParameter("bcc");
  subject = request.getParameter("subject");
  if(subject!=null){
  subject = new java.lang.String(subject.getBytes("iso-8859-1"));
  }
  body = request.getParameter("body");
  //發送留言
  mymail.mail.HTML.send(smtp,from,to,cc,bcc,subject,body);
  %>
  <jsp:forward page="sendok.jsp"/>
  /*HTML.java*/
  /*
  * 功能:用作調用send() 方法來發送郵件
  *
  * mymail.mail.HTML.Java
  * package mymail.mail;
  */
  public final class HTML
  {
  public static void send(
  java.lang.String smtp, /*SMTP主機地址*/
  java.lang.String from, /*發信人*/
  java.lang.String to, /*收信人*/
  java.lang.String cc, /*抄送人*/
  java.lang.String bcc, /*暗送人*/
  java.lang.String subject, /*主題*/
  java.lang.String body /*內容*/


  ) throws java.lang.Exception{
  //變數聲明
  java.util.Properties props; //系統屬性
  javax.mail.Session mailSession; //郵件會話對象
  javax.mail.internet.MimeMessage mimeMsg; //MIME郵件對象
  //設置系統屬性
  props = java.lang.System.getProperties(); //獲得系統屬性對象
  props.put("mail.smtp.host",smtp); //設置SMTP主機
  //獲得郵件會話對象
  mailSession = javax.mail.Session.getDefaultInstance(props,null);
  //創建MIME郵件對象
  mimeMsg = new javax.mail.internet.MimeMessage(mailSession);
  //設置發信人
  mimeMsg.setFrom(new javax.mail.internet.InternetAddress(from));
  //設置收信人
  if(to!=null)
  {
  mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO,javax.mail.
  internet.InternetAddress.parse(to));
  }
  //設置抄送人
  if(cc!=null)
  {
  mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,javax.mail.
  internet.InternetAddress.parse(cc));
  }
  //設置暗送人
  if(bcc!=null)
  {
  mimeMsg.setRecipients
  (javax.mail.Message.RecipientType.BCC,javax.mail.internet.InternetAddress.parse(bcc));
  }
  //設置郵件主題
  //mimeMsg.setSubject(subject);
  mimeMsg.setSubject(subject,"gb2312");
  //設置郵件內容,將郵件body部分轉化為HTML格式
  mimeMsg.setDataHandler
  (new javax.activation.DataHandler(new mymail.jaf.StringDataSource (body,"text/html")));
  //發送郵件
  javax.mail.Transport.send(mimeMsg);
  }
  }
  /* StringDataSource.Java */
  /*
  * 功能:將文本型轉化為HTML 格式
  * 注意引入的 jaf包
  *
  */
  package mymail.jaf;
  //mymail.jaf.StringDataSource.Java
  //import javax.activation.*;
  public class StringDataSource implements javax.activation.DataSource{
  private java.lang.String data;
  private java.lang.String type;
  public StringDataSource(java.lang.String data,java.lang.String type)
  {
  this.data = data;
  this.type = type;
  }
  public java.io.InputStream getInputStream() throws java.io.IOException
  {
  return new java.io.StringBufferInputStream(data);
  }
  public java.io.OutputStream getOutputStream() throws java.io.IOException
  {
  throw new java.io.IOException("it does not support this method now!");
  }
  public java.lang.String getContentType(){
  return type;
  }
  public java.lang.String getName(){
  return " mymail ";
  }
  }


[火星人 ] 如何使用JSP來發送郵件已經有877次圍觀

http://coctec.com/docs/java/show-post-61026.html