从apache tomcat发送邮件

时间:2011-11-01 18:10:55

标签: java jsp tomcat servlets javamail

我正在开发一个使用Tomcat 6作为我的网络服务器和JSP作为前端的Web项目。我想从Web服务器向电子邮件帐户发送邮件。我怎样才能做到这一点?

首先,这是我在JSP中的表单:

<form name="forgotpassword" onsubmit="return valid()">    
  <table>
    <tr>
      <td>Enter Employee ID</td>
      <td><input type="text" name="emp_id" size="50"/></td>
    </tr>
    <tr>
      <td>Enter Your Email Address</td>
      <td><input type="text" name="mailid" size="50"/></td>
    </tr>
    <tr>
      <td><input type="submit"style="margin-left:100px" name="forgot" value="SUBMIT">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" name="cancel" value="RESET"/></td>
    </tr>
  </table>
</form>

3 个答案:

答案 0 :(得分:13)

使用Java-Mail API.

  • 从JSP获取所需的输入,
  • 将其发布到Servlet
  • 调用服务方法以从Servlet发送邮件
  • 使用Java Mail API从服务方法a quick example
  • 发送邮件

答案 1 :(得分:3)

这很好用(gmail示例):

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMail {

    public static void main(String[] args) {

        final String username = "your_usename_goes_here";
        final String password = "your_password_goes_here";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
          });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("fromSomeone@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("toSomeone@gmail.com"));
            message.setSubject("A testing mail header !!!");
            message.setText("Dear Mail Crawler,"
                + "\n\n No spam to my email, please!");

            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

答案 2 :(得分:1)

这是最简单的方法,使用MailToURLConnection。 不需要额外的库。

public static void sendMail(String from, String to, String subject, String body, String[] headers) throws IOException {
   System.setProperty("mail.host", "localhost");

   URL u = new URL("mailto:"+to);
   MailToURLConnection con = (MailToURLConnection)u.openConnection();
   OutputStream os = con.getOutputStream();
   OutputStreamWriter w = new OutputStreamWriter(os);

   DateFormat df = new SimpleDateFormat("E, d MMM yyyy H:mm:ss Z");
   Date d = new Date();
   String dt = df.format(d);
   String mid = d.getTime()+from.substring(from.indexOf('@'));

   w.append("Subject: "+subject+"\r\n");
   w.append("Date: " +dt+ "\r\n");
   w.append("Message-ID: <"+mid+ ">\r\n");
   w.append("From: "+from+"\r\n");
   w.append("To: <"+to+">\r\n");
   if(headers!=null) {
      for(String h: headers)
         w.append(h).append("\r\n");
   }
   w.append("\r\n");

   w.append(body.replace("\n", "\r\n"));
   w.flush();
   w.close();
   os.close();
   con.close();
}