Servlet 发送电子邮件发送电子邮件

使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail APIJava Activation Framework)JAF)

  • 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。

  • 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)

你也可以使用本站提供的下载链接:

下载并解压缩这些文件,在新创建的顶层目录中,您会发现这两个应用程序的一些 jar 文件。您需要把 mail.jaractivation.jar 文件添加到您的 CLASSPATH 中。

发送一封简单的电子邮件

下面的示例将从您的计算机上发送一封简单的电子邮件。这里假设您的本地主机已连接到互联网,并支持发送电子邮件。同时确保 Java Email API 包和 JAF 包的所有的 jar 文件在 CLASSPATH 中都是可用的。

//文件名SendEmail.javaimportjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;importjavax.mail.*;importjavax.mail.internet.*;importjavax.activation.*;publicclassSendEmailextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//收件人的电子邮件IDStringto="abcd@gmail.com";//发件人的电子邮件IDStringfrom="web@gmail.com";//假设您是从本地主机发送电子邮件Stringhost="localhost";//获取系统的属性Propertiesproperties=System.getProperties();//设置邮件服务器properties.setProperty("mail.smtp.host",host);//获取默认的Session对象Sessionsession=Session.getDefaultInstance(properties);//设置响应内容类型response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{//创建一个默认的MimeMessage对象MimeMessagemessage=newMimeMessage(session);//设置From:headerfieldoftheheader.message.setFrom(newInternetAddress(from));//设置To:headerfieldoftheheader.message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));//设置Subject:headerfieldmessage.setSubject("ThisistheSubjectLine!");//现在设置实际消息message.setText("Thisisactualmessage");//发送消息Transport.send(message);Stringtitle="发送电子邮件";Stringres="成功发送消息...";StringdocType="<!DOCTYPEhtml>\n";out.println(docType+"<html>\n"+"<head><title>"+title+"</title></head>\n"+"<bodybgcolor=\"#f0f0f0\">\n"+"<h1align=\"center\">"+title+"</h1>\n"+"<palign=\"center\">"+res+"</p>\n"+"</body></html>");}catch(MessagingExceptionmex){mex.printStackTrace();}}}

现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:

....<servlet><servlet-name>SendEmail</servlet-name><servlet-class>SendEmail</servlet-class></servlet><servlet-mapping><servlet-name>SendEmail</servlet-name><url-pattern>/SendEmail</url-pattern></servlet-mapping>....

现在通过访问 URL http://localhost:8080/SendEmail 来调用这个 Servlet。这将会发送一封电子邮件到给定的电子邮件 ID abcd@gmail.com,并将显示下面所示的响应:

成功发送消息...

如果您想要发送一封电子邮件给多个收件人,那么请使用下面的方法来指定多个电子邮件 ID:

voidaddRecipients(Message.RecipientTypetype,Address[]addresses)throwsMessagingException

下面是对参数的描述:

  • type:这将被设置为 TO、CC 或 BCC。在这里,CC 代表抄送,BCC 代表密件抄送。例如 Message.RecipientType.TO

  • addresses:这是电子邮件 ID 的数组。当指定电子邮件 ID 时,您需要使用 InternetAddress() 方法。

发送一封 HTML 电子邮件

下面的示例将从您的计算机上发送一封 HTML 格式的电子邮件。这里假设您的本地主机已连接到互联网,并支持发送电子邮件。同时确保 Java Email API 包和 JAF 包的所有的 jar 文件在 CLASSPATH 中都是可用的。

本示例与上一个示例很类似,但是这里我们使用 setContent() 方法来设置第二个参数为 "text/html" 的内容,该参数用来指定 HTML 内容是包含在消息中的。

使用这个示例,您可以发送内容大小不限的 HTML 内容。

//文件名SendEmail.javaimportjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;importjavax.mail.*;importjavax.mail.internet.*;importjavax.activation.*;publicclassSendEmailextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//收件人的电子邮件IDStringto="abcd@gmail.com";//发件人的电子邮件IDStringfrom="web@gmail.com";//假设您是从本地主机发送电子邮件Stringhost="localhost";//获取系统的属性Propertiesproperties=System.getProperties();//设置邮件服务器properties.setProperty("mail.smtp.host",host);//获取默认的Session对象Sessionsession=Session.getDefaultInstance(properties);//设置响应内容类型response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{//创建一个默认的MimeMessage对象MimeMessagemessage=newMimeMessage(session);//设置From:headerfieldoftheheader.message.setFrom(newInternetAddress(from));//设置To:headerfieldoftheheader.message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));//设置Subject:headerfieldmessage.setSubject("ThisistheSubjectLine!");//设置实际的HTML消息,内容大小不限message.setContent("<h1>Thisisactualmessage</h1>","text/html");//发送消息Transport.send(message);Stringtitle="发送电子邮件";Stringres="成功发送消息...";StringdocType="<!DOCTYPEhtml>\n";out.println(docType+"<html>\n"+"<head><title>"+title+"</title></head>\n"+"<bodybgcolor=\"#f0f0f0\">\n"+"<h1align=\"center\">"+title+"</h1>\n"+"<palign=\"center\">"+res+"</p>\n"+"</body></html>");}catch(MessagingExceptionmex){mex.printStackTrace();}}}

编译并运行上面的 Servlet ,在给定的电子邮件 ID 上发送 HTML 消息。

在电子邮件中发送附件

下面的示例将从您的计算机上发送一封带有附件的电子邮件。这里假设您的本地主机已连接到互联网,并支持发送电子邮件。同时确保 Java Email API 包和 JAF 包的所有的 jar 文件在 CLASSPATH 中都是可用的。

//文件名SendEmail.javaimportjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;importjavax.mail.*;importjavax.mail.internet.*;importjavax.activation.*;publicclassSendEmailextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//收件人的电子邮件IDStringto="abcd@gmail.com";//发件人的电子邮件IDStringfrom="web@gmail.com";//假设您是从本地主机发送电子邮件Stringhost="localhost";//获取系统的属性Propertiesproperties=System.getProperties();//设置邮件服务器properties.setProperty("mail.smtp.host",host);//获取默认的Session对象Sessionsession=Session.getDefaultInstance(properties);//设置响应内容类型response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{//创建一个默认的MimeMessage对象MimeMessagemessage=newMimeMessage(session);//设置From:headerfieldoftheheader.message.setFrom(newInternetAddress(from));//设置To:headerfieldoftheheader.message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));//设置Subject:headerfieldmessage.setSubject("ThisistheSubjectLine!");//创建消息部分BodyPartmessageBodyPart=newMimeBodyPart();//填写消息messageBodyPart.setText("Thisismessagebody");//创建一个多部分消息Multipartmultipart=newMimeMultipart();//设置文本消息部分multipart.addBodyPart(messageBodyPart);//第二部分是附件messageBodyPart=newMimeBodyPart();Stringfilename="file.txt";DataSourcesource=newFileDataSource(filename);messageBodyPart.setDataHandler(newDataHandler(source));messageBodyPart.setFileName(filename);multipart.addBodyPart(messageBodyPart);//发送完整的消息部分message.setContent(multipart);//发送消息Transport.send(message);Stringtitle="发送电子邮件";Stringres="成功发送电子邮件...";StringdocType="<!DOCTYPEhtml>\n";out.println(docType+"<html>\n"+"<head><title>"+title+"</title></head>\n"+"<bodybgcolor=\"#f0f0f0\">\n"+"<h1align=\"center\">"+title+"</h1>\n"+"<palign=\"center\">"+res+"</p>\n"+"</body></html>");}catch(MessagingExceptionmex){mex.printStackTrace();}}}

编译并运行上面的 Servlet ,在给定的电子邮件 ID 上发送带有文件附件的消息。

用户身份认证部分

如果需要向电子邮件服务器提供用户 ID 和密码进行身份认证,那么您可以设置如下属性:

props.setProperty("mail.user","myuser");props.setProperty("mail.password","mypwd");

电子邮件发送机制的其余部分与上面讲解的保持一致。

编辑于2024-05-20 13:04