使用javax.mail发送邮件

抽空找资料,做了一个发送邮件的demo,具体的说明都在注释里了。防止后面又忘了!

package sendEmail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
*
* SendEmail
* 类作用描述
* @author yangchuang
* @since 2014-9-20 下午6:36:18
* @version 1.0.0
* 修改记录
* 修改日期 修改人 修改后版本 修改内容
*/
public class SendEmail {
/**
* Session对象,Session定义了全局的和每个用户的与邮件相关的属性,这些属性详细说明了客户机和服务器如何交流信息。
*/
private Session session;

/**
* Message表示单个邮件消息,其属性包括消息类型、地址信息和所定义的目录结构。但是Message类是一个抽象类,必须实现它的一个子类。
* Message类的主要方法有两部分,第一部分主要在发送邮件的时候使用,用于设置邮件的相关信息,包括邮件的发送者、接收者、主题和发送时间等。
* 通常使用MimeMessage,它是Message类的一个派生类。
*/
private Message message;

/**
* 是一个抽象类,用于邮件的发送。
*/
private Transport transport;

/**
* 发送邮件服务器的主机名(smtp.163.com)
*/
private String host;

/**
* 发送邮件的用户名 (xxxx@163.com)
*/
private String userName;

/**
* 与用户名对应的密码(xxxxxx)
*/
private String pwd;


/**
* 创建一个新的实例 SendEmail.
*
* @param host 发送邮件服务器的主机名(smtp.163.com)
* @param userName 发送邮件的用户名(xxxx@163.com)
* @param pwd 与用户名对应的密码(xxxxxx)
* @throws MessagingException
*/
public SendEmail(String host, String userName, String pwd) throws MessagingException {
Properties proTemp = new Properties();
// 设置发送邮件的邮件服务器的属性
proTemp.put("mail.smtp.host", host);
// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证
proTemp.put("mail.smtp.auth", "true");
// 通过proTemp属性对象获取Session实例
session = Session.getDefaultInstance(proTemp);
// 通过session对象获取Message实例
message = new MimeMessage(session);
// 通过session对象获取Message实例
transport = session.getTransport("smtp");
this.host = host;
this.userName = userName;
this.pwd = pwd;
}

public void send(String from, String address, String subject, String txt) throws AddressException {
this.send(from, new String[]{address}, subject, txt);
}

public void send(String from, String[] addressesStr, String subject, String txt) throws AddressException{
Address[] addresses = new Address[addressesStr.length];
for(int i = 0; i < addressesStr.length;i++){
addresses[i] = new InternetAddress(addressesStr[i]);
}
this.send(new InternetAddress(from), addresses, subject, txt);
}

public void send(Address from, Address[] addresses, String subject, String txt) {
try {
message.setFrom(from);

// 用于设置邮件的接收者。有两个参数,第一个参数是接收者的类型,第二个参数是接收者。
// 接收者类型可以是Message.RecipientType.TO,Message.RecipientType.CC和Message.RecipientType.BCC。
// TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人。接收者与发送者一样,通常使用InternetAddress的对象。
message.addRecipients(Message.RecipientType.TO, addresses);
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText(txt);
multipart.addBodyPart(contentPart);
message.setContent(multipart);
message.saveChanges();
// 链接
transport.connect(host, userName, pwd);
// 发送
transport.sendMessage(message, message.getAllRecipients());
// 关闭
transport.close();
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
}

public void modifyUser(String userName, String pwd){
this.userName = userName;
this.pwd = pwd;
}

public Transport getTransport() {
return transport;
}

public String getUserName() {
return userName;
}

public String getPwd() {
return pwd;
}

}


测试代码

package sendEmail;

import javax.mail.MessagingException;

public class SendEmailTest {
public static void main(String[] args) throws MessagingException {
SendEmail sendEmail = new SendEmail("smtp.163.com", "XXXXXX@163.com", "xxxxxx");
sendEmail.send("xxxxxx@163.com", new String[]{"xxxxxxxxx@qq.com","xxxxxxxxx@qq.com"}, "还没有收到了么!", "这才是测试邮件!");
sendEmail.modifyUser("xxxxxxxxxx@163.com", "xxxxxxxxx");
sendEmail.send("xxxxxxxxxx@163.com", new String[]{"xxxxxxxx@qq.com","xxxxxxxxxx@qq.com"}, "还没有收到了么!", "这才是测试邮件!");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值