随着互联网的快速发展,电子邮件已经成为人们日常工作和生活中不可或缺的一部分。在各行各业中,邮件的发送和接收已经成为必须掌握的技能,为了方便和高效地处理邮件,开发高效的邮件发送程序就显得格外重要。
在Java编程语言中,发送邮件是非常简单的。JavaMail API提供了大量的类和接口,使得编写高效的邮件发送程序非常容易。接下来,我们将深入探讨如何使用Java编写高效的邮件发送程序。
1.准备工作
在实现邮件发送之前,我们需要进行一些准备工作。第一步是获取JavaMail API,可以从官方网站(http://www.oracle.com/technetwork/java/index-138643.html)下载。
第二步是添加JavaMail API的jar包到我们的工程中。添加jar包的方式有多种,例如可以直接将jar包拷贝到工程的lib目录下,然后在工程中添加jar包。
2.编写JavaMail代码
JAVA邮件发送的基本原理: JavaMail 技术实质上定义了一套邮件的访问协议,包括接收,存储等。不过最常使用的是 SMTP (Simple Mail Transfer Protocol,简单邮件传送协议)协议。SMTP 协议基于文本,SMTP 的通信服务默认端口是 25 。有些邮件服务商还开放了 SSL 改进的 SMTP 端口 465 供有 权要求的客户使用.
使用JavaMail发送邮件有以下几个步骤:
1)创建一个邮件会话对象 Session;
2)创建一个邮件对象 Message,并设置相关的信息;
3)使用邮件会话对象 Session 得到当前连接的传输对象 Transport,并连接上SMTP服务器;
4)把填好信息的邮件对象 Message 交给当前连接的传输对象 Transport 发送。
需要的jar包
javaee.jar
javax.mail.jar
javax.activation.jar
3.封装邮件内容
我们使用JavaMail API封装邮件内容。邮件内容可以包含简单文本、HTML、图片等多种类型。下面是如何封装简单的文本内容:
```
public static void sendTextMail() throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.port", "587");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@qq.com", "xxxxx");
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("xxxx@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxx@163.com"));
message.setSubject("Hello JavaMail");
String content = "This is a test message.";
message.setText(content);
Transport transport = session.getTransport();
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("Text mail sent successfully.");
}
```
在这个例子中,我们使用了Properties对象指定了SMTP服务器地址、端口号、账号、密码等信息,并创建了一个邮件会话对象Session。Authenticator对象用于身份验证,可以在发送邮件前验证账号和密码。MimeMessage对象实例化后,使用setFrom()方法设置发件人,使用setRecipient()方法设置收件人,使用setText()方法设置文本内容。
4.封装HTML内容
下面是如何封装HTML内容的例子:
```
public static void sendHtmlMail() throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.port", "587");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@qq.com", "xxxxx");
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("xxxx@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxx@163.com"));
message.setSubject("Hello JavaMail");
String content = "
This is a test message.
";message.setContent(content, "text/html;charset=UTF-8");
Transport transport = session.getTransport();
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("Html mail sent successfully.");
}
```
在这个例子中,我们使用了setContent()方法设置邮件内容,content参数是HTML格式的字符串。这里使用了"text/html;charset=UTF-8"指定邮件内容的类型和字符集。MimeMessage对象实例化后和第一个例子一样。
5.发送带附件邮件
通过JavaMail API发送带附件的邮件需要使用到MimeMessage和MimeBodyPart类。下面是如何发送带附件的邮件的例子:
```
public static void sendAttachmentMail() throws Exception {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.port", "587");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@qq.com", "xxxxx");
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("xxxx@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("xxxx@163.com"));
message.setSubject("Hello JavaMail");
Multipart multipart = new MimeMultipart();
BodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(new DataHandler(new FileDataSource("test.txt")));
attachment.setFileName("test.txt");
multipart.addBodyPart(attachment);
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent("This is a test message.", "text/html;charset=UTF-8");
multipart.addBodyPart(bodyPart);
message.setContent(multipart);
Transport transport = session.getTransport();
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("Attachment mail sent successfully.");
}
```
在这个例子中,我们使用了MimeMultipart类作为邮件内容的容器,创建了一个BodyPart实例来保存附件内容。getFileDataSource()方法用于创建FileDataSource对象,该对象用于表示邮件附件。邮件内容的设置和第二个例子一样。
6.总结
JavaMail API是一个功能强大的邮件处理类库,使用它可以使邮件的发送和接收变得非常简单和高效。在使用Java编写邮件发送程序时,我们需要进行一些准备工作,随后按照邮件发送的基本步骤进行处理。在封装邮件内容时,我们可以选择简单文本、HTML或者包含附件的邮件等多种形式,以满足不同的邮件发送需求。