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

📅  最后修改于: 2023-12-03 14:47:25.082000             🧑  作者: Mango

Servlet-发送电子邮件

在Java web应用程序中,发送电子邮件是一个常见的需求。在Servlet中,我们可以使用JavaMail API来发送电子邮件。本文将介绍如何在Servlet中使用JavaMail API发送电子邮件。

步骤

以下是在Servlet中发送电子邮件的步骤:

  1. 导入JavaMail和相关依赖库
  2. 创建一个JavaMail邮件会话
  3. 创建一个MimeMessage对象
  4. 设置发件人,收件人,主题和内容
  5. 发送邮件
导入JavaMail和相关依赖库

首先,我们需要下载JavaMail API并将其添加到我们的项目中。此外,我们还需要添加Java Activation Framework库以支持JavaMail中的MimeMessage类型。

<dependencies>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.activation</groupId>
        <artifactId>javax.activation</artifactId>
        <version>1.2.0</version>
    </dependency>
</dependencies>
创建一个JavaMail邮件会话

接下来,我们需要创建一个JavaMail邮件会话。为了进行此操作,我们需要使用JavaMail API中提供的javax.mail.Session类。

import javax.mail.Session;

// 创建一个邮件会话
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");

Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("your-email@gmail.com", "your-password");
        }
    });

在此示例中,我们创建了一个邮件会话,并指定了SMTP服务器(Gmail),端口号,身份验证要求以及要使用的邮箱的用户名和密码。

创建一个MimeMessage对象

下一步是创建一个MimeMessage对象。该对象将用于构造我们要发送的邮件。

import javax.mail.internet.MimeMessage;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;

// 创建一个MimeMessage
MimeMessage message = new MimeMessage(session);
try {
    message.setFrom(new InternetAddress("from-email@gmail.com"));
    message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("to-email@gmail.com"));
    message.setSubject("Testing Subject");
    message.setText("Dear Mail Crawler,"
            + "\n\n No spam to my email, please!");
} catch (MessagingException e) {
    e.printStackTrace();
}

在此示例中,我们创建了一个MimeMessage对象,并设置发送方,接收方,主题和内容。

设置发件人,收件人,主题和内容

接下来,我们需要设置以下内容:

  • 发件人(email地址)
  • 收件人(email地址)
  • 主题
  • 内容
// 设置发件人,收件人,主题和内容
message.setFrom(new InternetAddress("from-email@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse("to-email@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler,"
        + "\n\n No spam to my email, please!");

在此示例中,我们将发件人,收件人,主题和内容设置为特定值。

发送邮件

最后,我们需要将邮件发送出去。为此,我们将使用MimeMessage对象和JavaMail Session对象。

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

在此示例中,我们使用Transport类的send方法来发送电子邮件。

完整代码示例:

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class EmailSenderServlet extends HttpServlet {

    private String host, port, user, pass;

    public void init() {
        host = "smtp.gmail.com";
        port = "587";
        user = "your-email@gmail.com";
        pass = "your-password";
    }

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {

        String recipient = request.getParameter("recipient");
        String subject = request.getParameter("subject");
        String content = request.getParameter("content");

        String resultMessage = "";

        try {
            // 创建一个邮件会话
            Properties props = new Properties();
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.port", port);
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");

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

            // 创建一个MimeMessage
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(user));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(recipient));
            message.setSubject(subject);
            message.setText(content);

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

            resultMessage = "邮件已成功发送";
        } catch (MessagingException e) {
            e.printStackTrace();
            resultMessage = "邮件发送失败,请检查您的网络连接并重试。";
        }

        request.setAttribute("Message", resultMessage);
        getServletContext().getRequestDispatcher("/result.jsp").forward(
                request, response);
    }
}

使用JavaMail API发送电子邮件的过程可能比较复杂,但是一旦你理解了这些概念,你就可以在你的web应用程序中使用它来发送电子邮件了。