sending mail from apache tomcat

2020-02-11 03:32发布

I am working on a web project using Tomcat 6 as my webserver and JSP as frontend. I want to send a mail from the web server to an email account. How can I achieve this?

To start, here is my form in 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条回答
Fickle 薄情
2楼-- · 2020-02-11 04:12

Using Java-Mail API.

  • Take required inputs from JSP,
  • Post it to Servlet
  • Invoke service method to send Mail from Servlet
  • Use Java Mail API to send mails from service method, a quick example
查看更多
来,给爷笑一个
3楼-- · 2020-02-11 04:19

This is simplest way, using MailToURLConnection. No additional libraries needed.

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();
}
查看更多
冷血范
4楼-- · 2020-02-11 04:37

This works fine (gmail example) :

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);
        }
    }
}
查看更多
登录 后发表回答