在实际的开发过程中,java发送邮件有着非常广泛的应用。例如:注册账户时激活账户;忘记密码时取回密码;发送欢迎邮件等等。
今天,我们就来看一下利用java mail发送邮件。
我们在开发java mail发送邮件的时候,必须有这activation.jar,additionnal.jar以及mail.jar这三个jar包。这几个jar包包含我们开发发送邮件程序所需要的类。
java mail发送邮件的大概步骤如下:
1、创建一个java.util.Properties类,此类中,存放mail服务器地址、mail服务所用的协议、服务器的端口号、是否需要登录验证等相关的配置信息。
2、创建一个javax.mail.Authenticator类的子类,用来存储登录mail服务器的用户名和密码。
3、利用1、2所创建的类,调用javax.mail.Session类的静态方法getDefaultInstance()来获取Session对象。此Session对象就是程序客户端与邮件服务器之间的连接。
4、利用3中所取得的Session对象,创建一个新的javax.mail.Message的实现类对象。并在对象中设置发件人、收件人、主题、发送内容等相关。
5、从Session对象中获取javax.mail.Transport对象。
6、利用5中所获取的Transport对象,发送邮件,发送完毕后,关闭Transport对象。
java mail发送邮件中所使用的类及相互之间的关系:
接下来我们看看java mail发送邮件的几个实例。
一、java mail发送文本邮件
public class MailDemo {
public Session createSession() {
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "smtp");
p.setProperty("mail.host", "smtp.163.com");
p.setProperty("mail.smtp.port","25");
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.debug", "true");
Session s = Session.getDefaultInstance(p, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("choukakou@163.com", "BRZJH1SJHHRHL");
}
});
return s;
}
public Message createMessage(Session session) throws AddressException, MessagingException {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("choukakou@163.com"));
msg.setSubject("message");
msg.setText("This is a test message for mail");
msg.setSentDate(new Date());
return msg;
}
public static void main(String[] args) throws AddressException, MessagingException {
MailDemo demo = new MailDemo();
Session session = demo.createSession();
Message message = demo.createMessage(session);
Transport port = session.getTransport();
port.connect();
port.sendMessage(message, new Address[]{new InternetAddress("zhao.jiahong@yahoo.com")});
port.close();
}
}
二、发送HTML邮件
<pre name="code" class="java"> public class MailDemo {
public Session createSession() {
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "smtp");
p.setProperty("mail.host", "smtp.163.com");
p.setProperty("mail.smtp.port","25");
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.debug", "true");
Session s = Session.getDefaultInstance(p, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("choukakou@163.com", "BRZJH1SJHHRHL");
}
});
return s;
}
public Message createMessage(Session session) throws AddressException, MessagingException {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("choukakou@163.com"));
msg.setSubject("html message");
msg.setContent("<a href=''>链接</a>","text/html;charset=gbk");
msg.setSentDate(new Date());
return msg;
}
public static void main(String[] args) throws AddressException, MessagingException {
MailDemo demo = new MailDemo();
Session session = demo.createSession();
Message message = demo.createMessage(session);
Transport port = session.getTransport();
port.connect();
port.sendMessage(message, new Address[]{new InternetAddress("zhao.jiahong@yahoo.com")});
port.close();
}
}
三、发送带有附件的邮件
public class MailDemo {
public Session createSession() {
Properties p = new Properties();
p.setProperty("mail.transport.protocol", "smtp");
p.setProperty("mail.host", "smtp.163.com");
p.setProperty("mail.smtp.port","25");
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.debug", "true");
Session s = Session.getDefaultInstance(p, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("choukakou@163.com", "BRZJH1SJHHRHL");
}
});
return s;
}
public Message createMessage(Session session) throws AddressException, MessagingException {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("choukakou@163.com"));
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> MimeMultipart mimeMultipart = new MimeMultipart();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> MimeBodyPart bodyPart = new MimeBodyPart();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> bodyPart.setText("message");
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> MimeBodyPart attech1 = new MimeBodyPart();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> mimeMultipart.addBodyPart(bodyPart);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> DataSource ds1 = new FileDataSource("F:\\hello.txt");
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> DataHandler dh = new DataHandler(ds1);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> attech1.setDataHandler(dh);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> attech1.setFileName("hello");
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> mimeMultipart.addBodyPart(attech1);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> msg.setContent(mimeMultipart);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span> msg.setSentDate(new Date());
return msg;
}
public static void main(String[] args) throws AddressException, MessagingException {
MailDemo demo = new MailDemo();
Session session = demo.createSession();
Message message = demo.createMessage(session);
Transport port = session.getTransport();
port.connect();
port.sendMessage(message, new Address[]{new InternetAddress("zhao.jiahong@yahoo.com")});
port.close();
}
}
这就是java mail发送邮件的过程,仔细的看上述过程,你会发现,其实java mail发送各种邮件的过程是一致的,只是创建各种不同的Message过程稍有不同而已。