黑马程序员_使用JavaMail发送注册验证邮件

本文介绍了如何使用JavaMail API发送电子邮件,包括配置邮件会话、创建邮件消息、设置收件人及主题等步骤,并提供了一个完整的JavaMail发送邮件示例。
------- android培训java培训、期待与您交流! ----------

JavaMailSun发布的用来处理E-mailAPI,它可以方便地执行一些常用的邮件传输。虽然JavaMailSunAPI之一,但它没有被加在标准的Java开发工具包(JDK)中,这就意味着使用之前必须另外下载JavaMail文件(http//www.sun.com),除此之外,要使用JavaMail,还需要有SunJavaBeans Activation FrameworkJAF)支持,因此需要下载一个叫activation.jar的文件,将他们同时放在应用的lib目录下或其他Classpath包含的目录。

发送邮件过程中主要使用到的几个类:

1. Javax.mail.Session

Session定义了一个基本的邮件会话,任何工作都是基于这个Session的。Session对象需要一个java.util.Properties对象得到类似邮件服务器、用户名、密码这样的信息。Session的构造函数是私有的,可以通过getDefaultInstance()方法取得一个单一的可以被共享的默认Session,如:

Properties props = new Properties() ;

……

Session  session = Session.getDefaultInstance(props, null) ;

或者,可以通过getInstance()方法来创建一个惟一的Session,如:

Properties props = new Properties() ;

……

Session session = Session.getInstance(props, null) ;

2. Javax.mail.Message

创建了Session对象后,就要创建Message来发送SessionMessage是一个抽象类,在大部分应用中可以使用它的子类Javax.mail.internet.MimeMessage

创建Message的方法如下:

MimeMessage  message = new MimeMessage(session) ;

设置内容(content)的基本机制是使用setContent()方法:message.setContent(“Email Content.” , “text/plain”)

如果能够明确地使用MimeMessage来创建Message,并且只是使用普通的文本(plain text),那么也可以使用setText(“Email Content.”)

如果要创建其他类型的Message,如HTML类型的Message,那么还是使用前者message.setContent(“Email Content.” , “text/html”)

设置主题(subject),使用setSubject()方法:message.setSubject(“Subject”)

3. Javax.mail.Address

Address是一个抽象类,可以使用它的子类javax.mail.internet.InternetAddress

创建一个Address语句如下:

Address address = new InternetAddress(“test@company.com”);

如果希望在出现邮件地址的地方显示一个名称,那么只需要再多传递一个参数。

Address address = new InternetAddress(“test@company.com”, “Kylen”);

除此,需要为Messagefrom以及to字段创建address对象。为了识别发送者,使用setFrom()setReplyTo()方法。

message.setFrom(address) ;

如果需要显示多个from地址,可以使用addFrom()方法:

Address address[] = {……};

message.addFrom(address) ;

为了辨识Message的收件人,需要使用setRecipient()方法。

message.addRecipient(type, address) ;

Message.RecipientType 有几个预先定义好的类型:

Message.RecipientType.To     收件人   

Message.RecipientType.CC    抄送

Message.RecipientType.BCC   暗送

同时发给多个人:

Address  toAddress = new InternetAddress(“manager@company.com”);

Address[] ccAddress = {new  InternetAddress(“colleague1@company.com”),

new  InternetAddress(“colleague2@company.com”)} ;

message.addRecipient(Message.RecipientType.To , toAddress) ;

message.addRecipient(Message.RecipientType.CC , ccAddress) ;

4. Javax.mail.Transport

最后,需要使用一个Transport类来完成邮件发送,可以通过两种方法发送邮件。Transport是一个抽象类,可以调用它的静态的send()方法来发送:

Transport.send(message) ;

或者,可以从Session中为所使用的协议取得一个指定的实例:

Transport  transport = session.getTransport(“smtp”) ;

transport.sendMessage(message , message.getAllRecipients()) ;

transport.close() ;

经过以上的介绍,要用JavaMail发送一封普通的邮件就变得相当容易了。本实例编写了一个专门用于邮件处理的类MailUtil.java,其源代码如下:

package ch2.util.mail;

import java.util.Date;

import java.util.Properties;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.NoSuchProviderException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class MailUtil {

static int port = 25;   //smtp端口

static String server = "smtp.163.com";   //smtp服务器地址

static String from = "Webmaster<kylen@163.com>";   //发送者

static String user = "kylen@163.com";    //发送者地址

static String password = "1141940938";   //密码

public static void sendEmail(String email, String subject, String body) {

try {

Properties props = new Properties();

props.put("mail.smtp.host"server);

props.put("mail.smtp.port", String.valueOf(port));

props.put("mail.smtp.auth""true");

Transport transport = null;

Session session = Session.getDefaultInstance(props, null);

transport = session.getTransport("smtp");

transport.connect(serveruserpassword);

MimeMessage msg = new MimeMessage(session);

msg.setSentDate(new Date());

InternetAddress fromAddress = new InternetAddress(from);

msg.setFrom(fromAddress);

InternetAddress[] toAddress = new InternetAddress[1];

toAddress[0] = new InternetAddress(email);

msg.setRecipients(Message.RecipientType.TO, toAddress);

msg.setSubject(subject, "UTF-8");

msg.setText(body, "UTF-8");

msg.saveChanges();

transport.sendMessage(msg, msg.getAllRecipients());

catch (NoSuchProviderException e) {

e.printStackTrace();

catch (MessagingException e) {

e.printStackTrace();

}

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值