上代码:
以下是按代码顺序写的,直接copy修改就可以用,算是简单完整的发邮件代码,主要是为了说明怎么使用。
先新建一个属性配置,是用来生成邮件Session的:
props = new Properties();
//协议,这里使用smtp
props.put("mail.transport.protocol", "smtp");
//邮件服务器主机地址,可以是ip地址,也可以是比如smtp.qq.com
props.put("mail.smtp.host", "172.168.1.1");
//端口号
props.put("mail.smtp.port", "25");
//这个一般都为true
props.put("mail.smtp.auth", "true");
//邮件是否使用使用ssl安全连接,使用ssl需要使用对应的端口号
props.put("mail.smtp.ssl.enable", "true");
//是够开启debug模式,开启在控制台会有发邮件过程的信息打印出来
props.put("mail.debug", "true");
获取session:
//第一个参数是上面的配置内容,第二个是验证参数,这里为空表示先不验证登录邮件服务器
Session session = Session.getDefaultInstance(props, null);
建议创建Session的时候直接验证登录,这样在后面就不用验证直接发送就可以了,验证方法是写个类继承Authenticator,如下:
//直接抄这个就行
public class MyAuthenticator extends Authenticator {
private String username;
private String password;
//带用户名和密码参数的构造方法
public MyAuthenticator(String username, String password) {
super();
this.username = username;
this.password = password;
}
/**
* 重写父类方法,这个必须要有的
*/
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
然后new MyAuthenticator(用户名,密码),作为上面第二个参数,这样获取到的session是通过验证的,如下:
//新建一个验证类实例
Authenticator auth = new MyAuthenticator(用户名,密码);
//然后直接获取有用户名和密码验证的session
Session session = Session.getInstance(props, auth);
//还有一种写法是getDefaultInstance,应用开启后只加载缓存中已有的properties,所以想要改变发送账号什么的不要使用这个方法
Session session = Session.getDefaultInstance(props, null);
获取到session之后,直接获取到MimeMessage,MimeMessage是用来包装所有邮件内容的,如下:
MimeMessage message = new MimeMessage(session);
接下来是封装MimeMessage 的内容,分为Text和MIME类型的邮件体,不过这两种邮件体有公共部分,如下:
//设置发件人,一般服务器会限制要求和验证登录的账号一致,防止伪造发送
message.setFrom(new InternetAddress("944****66@qq.com"));
//设置邮件主题
message.setSubject("一封邮件的主题");
//设置发送时间,真的可以自己自定义个发送的时间的哦
message.setSentDate(new Date());
//设置回复的地址,表示你收到邮件后回复这个邮件的目标地址,可以设置多个地址,但有些服务器失效
message.setReplyTo(Address[] addresses);
//设置是否需要回执,默认是不需要,只要设置了就表示需要,noteTo是回执发送的地址(一般是发件人)
message.setHeader("Disposition-Notification-To", noteTo);
//设置优先级(1:紧急 3:普通 5:低),紧急的邮件在接收方看到会有叹号标志的
message.setHeader("X-Priority", "1");
/*
* message.setHeader(String,String)方法是根据参数设置东西的,自己了解
*/
message.setRecipients也是不管Text还是MIME类型都有的,两者设置方法是一样的,由于这个方法解析内容多,所以画个横线
//设置收件人,抄送人,密送人,重载的方法主要有下面两种,区别只在于第二个参数邮件地址使用Address[]还是String 类型表示
message.setRecipients(