使用你的 Java 应用程序发送电子邮件是非常简单的,但是首先你需要确保已经安装了 JavaMail API 和 Java 激活框架 (JAF)。
你可以从 Java 的标准网站下载最新版本的 JavaMail (版本 1.2)。
你也可以从 Java 的标准网站下载最新版本的 JAF (版本 1.1.1)。
下载并解压这些文件,在新创建的顶级目录中你会找到这两个应用的多个 .jar
文件。你需要把 mail.jar
和 activation.jar
文件添加到你的 CLASSPATH
中。
发送简单的电子邮件
下面是一个示例,用于从你的机器发送一封简单的电子邮件。假设你的本地主机连接到了互联网并且有足够的权限发送电子邮件。
示例
// 文件名 SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("这是主题行!");
message.setText("这是实际消息");
Transport.send(message);
System.out.println("成功发送消息...");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
输出
编译并运行此程序以发送一封简单的电子邮件:
$ java SendEmail
成功发送消息...
如果你想要向多个收件人发送电子邮件,则可以使用以下方法来指定多个电子邮件地址:
void addRecipients(Message.RecipientType type, Address[] addresses)
throws MessagingException
这里的参数描述如下:
-
type
— 这会被设置为 TO
, CC
或 BCC
。这里的 CC
代表抄送,BCC
代表密送。例如:Message.RecipientType.TO
-
addresses
— 这是一个电子邮件地址数组。指定电子邮件地址时需要使用 InternetAddress()
方法。
发送 HTML 邮件
下面是一个示例,用于从你的机器发送 HTML 邮件。这里假设你的本地主机连接到了互联网并且有足够的权限发送电子邮件。
此示例与前面的一个非常相似,唯一的区别在于我们在这里使用 setContent()
方法来设置内容,其第二个参数是 "text/html"
以指明消息中包含了 HTML 内容。
使用此示例,你可以发送任意大小的 HTML 内容。
示例
// 文件名 SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail {
public static void main(String [] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("这是主题行!");
message.setContent("<h1>这是实际消息</h1>", "text/html");
Transport.send(message);
System.out.println("成功发送消息...");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
输出
编译并运行此程序以发送 HTML 邮件:
$ java SendHTMLEmail
成功发送消息...
在电子邮件中发送附件
下面是一个示例,用于从你的机器发送带有附件的电子邮件。这里假设你的本地主机连接到了互联网并且有足够的权限发送电子邮件。
示例
// 文件名 SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail {
public static void main(String [] args) {
String to = "abcd@gmail.com";
String from = "web@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject("这是主题行!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("这是消息正文");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart );
Transport.send(message);
System.out.println("成功发送消息...");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
输出
编译并运行此程序以发送带有附件的电子邮件:
$ java SendFileEmail
成功发送消息...
用户身份验证部分
如果需要向邮件服务器提供用户名和密码以便进行身份验证,那么你可以按照如下方式设置这些属性:
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
其余的电子邮件发送机制与上述解释相同。