JavaMail发送带附件的邮件教程

需积分: 12 2 下载量 144 浏览量 更新于2024-09-12 收藏 60KB DOC 举报
“使用JavaMail发送带有附件的电子邮件的教程” 在Java编程中,发送电子邮件是一项常见的任务,JavaMail API提供了一种标准的方式来处理这个需求。本教程将介绍如何使用JavaMail API发送带有附件的电子邮件。 首先,我们来看邮件验证部分。在发送邮件时,通常需要验证发送者的身份,这可以通过提供用户名和密码来实现。`MailAuthorization`类是自定义的认证器,它扩展了`javax.mail.Authenticator`。此类包含两个私有变量,分别存储用户名和密码,并重写了`getPasswordAuthentication()`方法,当需要验证时,该方法返回一个`PasswordAuthentication`对象,包含了预先设置的用户名和密码。 ```java public class MailAuthorization extends Authenticator { private String username; private String password; public MailAuthorization(String username, String password) { this.username = username; this.password = password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } } ``` 接下来,我们关注邮件信息的设置。`MailInfo`类是用来存储发送邮件所需的配置信息,如SMTP服务器地址、端口、用户名和密码。这些信息是发送邮件的前提,确保了邮件能正确地从发件人传递到收件人。 ```java public class MailInfo { private String hostName; private String hostPort; private String userName; private String password; // getters and setters... } ``` 发送带有附件的邮件涉及多个步骤。首先,需要创建`Session`对象,这是JavaMail的核心,包含了邮件发送的配置信息。使用`MailAuthorization`实例初始化`Session`,提供认证信息: ```java Properties props = System.getProperties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", mailInfo.getHost()); props.put("mail.smtp.port", mailInfo.getPort()); Session session = Session.getInstance(props, new MailAuthorization(mailInfo.getUserName(), mailInfo.getPassword())); ``` 接着,创建`MimeMessage`对象,它是JavaMail API中的邮件消息容器,可以容纳邮件头信息和内容。添加附件需要用到`MimeBodyPart`和`MimeMultipart`类: ```java MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(mailInfo.getUserName())); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); MimeBodyPart messagePart = new MimeBodyPart(); messagePart.setText(messageContent); MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile(attachmentFilePath); MimeMultipart multipart = new MimeMultipart(); multipart.addBodyPart(messagePart); multipart.addBodyPart(attachmentPart); message.setContent(multipart); ``` 最后,使用`Transport`类发送邮件: ```java Transport transport = session.getTransport("smtp"); transport.connect(mailInfo.getHost(), mailInfo.getUserName(), mailInfo.getPassword()); transport.sendMessage(message, message.getAllRecipients()); transport.close(); ``` 总结来说,JavaMail API提供了丰富的功能来处理邮件的发送,包括添加附件。通过创建`Authenticator`和`Session`对象来处理认证,使用`MimeMessage`构建邮件内容,以及通过`MimeBodyPart`和`MimeMultipart`添加附件,最终使用`Transport`发送邮件。这个过程覆盖了从验证、构建邮件到发送的完整流程。