Java发送邮件javax.mail的实现方法
在Java编程中,使用`javax.mail`包可以实现发送电子邮件的功能。这个库提供了一套完整的API,用于处理邮件协议,包括SMTP(简单邮件传输协议)等。以下将详细讲解如何利用`javax.mail`来发送邮件。 我们需要了解邮件的基本信息,这包括收件人、发件人、主题、内容等。在提供的代码示例中,这些信息被定义为静态变量,放在一个名为`EmailMessage`的类中。例如: ```java public class EmailMessage { public static String TO = "xxx@xxx.com"; public static String FROM = "xxx@xxx.com"; public static String FROM_NAME = "xxx"; public static String CC = "xxx@nxxx.com"; public static String BCC = "xxx@nxxx.com"; public static String Email_Content = "text/plain"; public static String Email_Subject = "Test Email With JavaMail"; public static String Email_Header = "This Is Email Header"; public static String Email_Body = "<a href=\"http://www.baidu.com\">This Is Email Body</a>"; public static String Email_Host = "smtp.xxx.com"; public static Date sendDate = new Date(); public static boolean validate = true; } ``` 接下来,为了能够通过SMTP服务器验证身份,我们需要创建一个`Authenticator`的子类,比如`MailAuthenticator`,并提供用户名和密码: ```java public class MailAuthenticator extends Authenticator { private String username; private String password; public MailAuthenticator(String userName, String password) { this.username = userName; this.password = password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } } ``` 发送邮件的关键步骤包括设置邮件属性、创建会话和发送消息。以下是一个简单的邮件发送过程: 1. **设置属性**:使用`Properties`对象配置SMTP服务器的相关信息,例如主机地址、端口号等。如果需要验证,还需要设置认证器。 ```java Properties props = new Properties(); props.put("mail.smtp.host", EmailMessage.Email_Host); props.put("mail.smtp.port", "587"); // 假设SMTP服务器端口是587 props.put("mail.smtp.auth", EmailMessage.validate ? "true" : "false"); props.put("mail.smtp.starttls.enable", "true"); // 开启TLS加密 ``` 2. **创建会话**:基于上述属性和认证器创建`Session`对象。 ```java Session session = Session.getInstance(props, new MailAuthenticator(EmailMessage.FROM, "your_password")); ``` 3. **构建消息**:使用`MimeMessage`创建邮件消息,并设置收件人、抄送人、密送人、主题、内容等信息。 ```java MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(EmailMessage.TO)); message.setSubject(EmailMessage.Email_Subject); message.setHeader(EmailMessage.Email_Header, EmailMessage.Email_Header); if (!EmailMessage.CC.isEmpty()) message.addRecipient(Message.RecipientType.CC, new InternetAddress(EmailMessage.CC)); if (!EmailMessage.BCC.isEmpty()) message.addRecipient(Message.RecipientType.BCC, new InternetAddress(EmailMessage.BCC)); ``` 4. **添加内容**:根据邮件类型(文本或HTML),添加内容。如果是HTML,需要创建`Multipart`对象。 ```java MimeBodyPart htmlPart = new MimeBodyPart(); htmlPart.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content); Multipart multipart = new MimeMultipart("alternative"); multipart.addBodyPart(htmlPart); message.setContent(multipart); ``` 5. **发送邮件**:使用`Transport`类的`send`方法发送邮件。 ```java Transport.send(message); ``` 以上就是使用Java和`javax.mail`库发送邮件的基本流程。在实际应用中,可能需要处理更多细节,比如异常处理、附件添加、超时设置等。同时,注意替换示例中的占位符,如邮箱地址、用户名、密码等,以符合实际需求。