📜  Servlet – 发送电子邮件(1)

📅  最后修改于: 2023-12-03 15:20:06.450000             🧑  作者: Mango

Servlet - 发送电子邮件

在Web应用中,发送电子邮件是一项常见的任务。在Servlet中,我们可以使用JavaMail API来发送电子邮件。本文将介绍如何使用Servlet发送电子邮件。

添加JavaMail依赖

首先,我们需要添加JavaMail API依赖。将以下依赖添加到您的项目的pom.xml文件中:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
编写Servlet代码

在Servlet中,我们可以使用JavaMailSession类来创建电子邮件会话。下面是一个简单的示例代码,它可以发送一封带有文本和HTML内容的电子邮件:

import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Properties;

@WebServlet("/sendEmail")
public class SendEmailServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求参数
        String recipient = request.getParameter("recipient");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");

        // 设置邮件属性
        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("your-email-address@gmail.com", "your-email-password");
                    }
                });

        try {
            // 创建邮件
            Message mail = new MimeMessage(session);
            mail.setFrom(new InternetAddress("your-email-address@gmail.com"));
            mail.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            mail.setSubject(subject);

            // 创建Multipart对象
            Multipart multipart = new MimeMultipart();

            // 配置文本部分
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setText(message, "utf-8");

            // 配置HTML部分
            MimeBodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(message, "text/html;charset=utf-8");

            // 将文本部分和HTML部分添加到Multipart
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(htmlPart);

            // 将Multipart添加到邮件中
            mail.setContent(multipart);

            // 发送邮件
            Transport.send(mail);

            // 发送成功,重定向到“发送成功”页面
            response.sendRedirect("sendSuccess.jsp");
        } catch (MessagingException e) {
            // 发送失败,重定向到“发送失败”页面
            response.sendRedirect("sendFail.jsp");
        }
    }
}

在这个示例中,我们使用Gmail SMTP服务器来发送邮件。您需要替换“your-email-address”和“your-email-password”为您自己的电子邮件地址和密码。

创建表单页面

最后,我们需要创建一个表单页面来收集电子邮件信息,然后将表单提交到SendEmailServlet。以下是一个简单的表单页面示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Send Email Form</title>
</head>
<body>
    <h1>Send Email</h1>
    <form method="post" action="sendEmail">
        <label for="recipient">Recipient:</label>
        <input type="email" id="recipient" name="recipient" required><br>

        <label for="subject">Subject:</label>
        <input type="text" id="subject" name="subject" required><br>

        <label for="message">Message:</label>
        <textarea id="message" name="message" required></textarea><br>

        <input type="submit" value="Send">
    </form>
</body>
</html>
结论

现在您已经知道如何在Servlet中发送电子邮件。使用JavaMail API,可以轻松地添加电子邮件功能到您的Web应用中。