Mail邮件类声明
public class Mail {
public static final String HOST = "xxx" ; // smtp服务器
public static final String USER = "xxx" ; // 用户名--就是邮箱地址@之前的部分
public static final String PASSWORD = "xxx" ; // 密码--邮箱密码
public static final String FROM = "xxx" ; // 发件人地址
private String to = ""; // 收件人地址
private String subject = ""; // 邮件标题
private String comment=""; // 邮件内容
private String affixUrl=""; // 附件绝对路径
private String toOther=""; //抄送
/**
* 发送邮件
*/
public static void SendMail(Mail mail) throws AddressException, MessagingException{
SendMessageMail.send(mail);
}
//get/set方法......
public class Mail {
public static final String HOST = "xxx" ; // smtp服务器
public static final String USER = "xxx" ; // 用户名--就是邮箱地址@之前的部分
public static final String PASSWORD = "xxx" ; // 密码--邮箱密码
public static final String FROM = "xxx" ; // 发件人地址
private String to = ""; // 收件人地址
private String subject = ""; // 邮件标题
private String comment=""; // 邮件内容
private String affixUrl=""; // 附件绝对路径
private String toOther=""; //抄送
/**
* 发送邮件
*/
public static void SendMail(Mail mail) throws AddressException, MessagingException{
SendMessageMail.send(mail);
}
//get/set方法......
SendMessageMail类静态方法send()
public class SendMessageMail {
public static void send(Mail mail) throws AddressException, MessagingException {
Properties props = new Properties(); // 存储连接邮件服务器参数
props.put("mail.smtp.host", Mail.HOST); //smtp主机
props.put("mail.smtp.auth", "true");//身份验证,目前免费邮件服务器都需要这一项
/** props对象构建一个邮件session
* Session类代表JavaMail中的一个邮件会话。
* 每一个基于JavaMail的应用程序至少有一个Session(可以有任意多的Session)
* JavaMail需要Properties来创建一个session对象
*/
Session session = Session.getDefaultInstance(props);
// 有了这句便可以在发送邮件的过程中的Console处显示过程信息,供调试使用,(你可以在控制台-console上看到发送邮件的过程)
session.setDebug(false);
/**
* Message对象将存储我们实际发送的电子邮件信息,
* Message对象被作为一个MimeMessage对象来创建。
*/
MimeMessage message = new MimeMessage(session);
// 加载发件人地址
message.setFrom(new InternetAddress(Mail.USER));
// 设置接收方地址使用addRecipient方法,地址类型有三种:
// RecipientType.TO:e-mail的发送地址;
// RecipientType.CC:抄送地址,可以为多个;
// RecipientType.BCC:暗送地址,可以为多个。
if("" != mail.getTo()){
// 加载收件人地址
String toOt[] = mail.getTo().split(";");
InternetAddress[] sendTo = new InternetAddress[toOt.length];
for (int i = 0; i < toOt.length; i++) {
System.out.println("发送到:" + toOt[i]);
//InternetAddress类通过一个合法的e-mail构造出e-mail地址对象
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toOt[i].toString()));
}
}
//抄送
if("" != mail.getToOthers() && null != mail.getToOthers()){
// 加载抄送人地址
String toOt[] = mail.getToOthers().split(";");
InternetAddress[] sendTo = new InternetAddress[toOt.length];
for (int i = 0; i < toOt.length; i++) {
System.out.println("抄送到:" + toOt[i]);
sendTo[i] = new InternetAddress(toOt[i]);
}
message.addRecipients(Message.RecipientType.CC, sendTo); // 抄送人地址
}else{
System.out.println("没有抄送人");
}
//邮件标题
message.setSubject(mail.getSubject());
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
MimeMultipart msgMultipart = new MimeMultipart("mixed");
// message.setContent(msgMultipart);
//添加正文(文本或html)
MimeBodyPart content = new MimeBodyPart();
content.setContent(mail.getComment(),"text/html;charset=utf-8");
msgMultipart.addBodyPart(content);
//发送附件
if (null != mail.getAffixUrl() && !"".equals(mail.getAffixUrl())) {
// 添加附件
BodyPart affixPart = new MimeBodyPart();
//DataSource类表示本地文件和服务器可以直接访问的资源,它是一个抽象类,用其子类FileDataSource来创建。
DataSource source = new FileDataSource(mail.getAffixUrl());
// 添加附件的内容,附件被封装到一个DataHandler对象
affixPart.setDataHandler(new DataHandler(source));
//设置附件文件名
String affixName = null;
// 附件名称因为要有后缀名,否则将无法读取和下载,所以要从affix_url中获取!
if (mail.getAffixUrl().contains("//")) {
int i = mail.getAffixUrl().lastIndexOf("//");
affixName = mail.getAffixUrl().substring(i + 2);
} else if (mail.getAffixUrl().contains("\\")) {
int i = mail.getAffixUrl().lastIndexOf("//");
affixName = mail.getAffixUrl().substring(i + 1);
} else {
affixName = mail.getAffixUrl();
}
// javamail支持对base64编码的邮件解码,添加附件的标题 **这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
BASE64Encoder enc = new BASE64Encoder();
// affixPart.setFileName("=?utf-8?B?"+enc.encode(affixName.getBytes())+"?="); MimeUtility
//MimeUtility.encodeWord可以避免文件名乱码
try {
affixPart.setFileName(MimeUtility.encodeWord(affixName));
} catch (UnsupportedEncodingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
System.err.println(mail.getSubject() + "邮件发送附件中……");
msgMultipart.addBodyPart(affixPart);
}
// 将multiPart对象放到message中
message.setContent(msgMultipart);
// 保存邮件
message.saveChanges();
/**发送邮件
* 邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和 Store。
* Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。
*/
Transport transport = session.getTransport("smtp");
// 链接服务器的邮箱
transport.connect(Mail.HOST, Mail.USER,Mail.PASSWORD);
// 把邮件发送出去
System.err.println(mail.getSubject() + "邮件发送中……");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.err.println(mail.getSubject() + "邮件发送成功");
}
}
public class SendMessageMail {
public static void send(Mail mail) throws AddressException, MessagingException {
Properties props = new Properties(); // 存储连接邮件服务器参数
props.put("mail.smtp.host", Mail.HOST); //smtp主机
props.put("mail.smtp.auth", "true");//身份验证,目前免费邮件服务器都需要这一项
/** props对象构建一个邮件session
* Session类代表JavaMail中的一个邮件会话。
* 每一个基于JavaMail的应用程序至少有一个Session(可以有任意多的Session)
* JavaMail需要Properties来创建一个session对象
*/
Session session = Session.getDefaultInstance(props);
// 有了这句便可以在发送邮件的过程中的Console处显示过程信息,供调试使用,(你可以在控制台-console上看到发送邮件的过程)
session.setDebug(false);
/**
* Message对象将存储我们实际发送的电子邮件信息,
* Message对象被作为一个MimeMessage对象来创建。
*/
MimeMessage message = new MimeMessage(session);
// 加载发件人地址
message.setFrom(new InternetAddress(Mail.USER));
// 设置接收方地址使用addRecipient方法,地址类型有三种:
// RecipientType.TO:e-mail的发送地址;
// RecipientType.CC:抄送地址,可以为多个;
// RecipientType.BCC:暗送地址,可以为多个。
if("" != mail.getTo()){
// 加载收件人地址
String toOt[] = mail.getTo().split(";");
InternetAddress[] sendTo = new InternetAddress[toOt.length];
for (int i = 0; i < toOt.length; i++) {
System.out.println("发送到:" + toOt[i]);
//InternetAddress类通过一个合法的e-mail构造出e-mail地址对象
message.addRecipient(Message.RecipientType.TO, new InternetAddress(toOt[i].toString()));
}
}
//抄送
if("" != mail.getToOthers() && null != mail.getToOthers()){
// 加载抄送人地址
String toOt[] = mail.getToOthers().split(";");
InternetAddress[] sendTo = new InternetAddress[toOt.length];
for (int i = 0; i < toOt.length; i++) {
System.out.println("抄送到:" + toOt[i]);
sendTo[i] = new InternetAddress(toOt[i]);
}
message.addRecipients(Message.RecipientType.CC, sendTo); // 抄送人地址
}else{
System.out.println("没有抄送人");
}
//邮件标题
message.setSubject(mail.getSubject());
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
MimeMultipart msgMultipart = new MimeMultipart("mixed");
// message.setContent(msgMultipart);
//添加正文(文本或html)
MimeBodyPart content = new MimeBodyPart();
content.setContent(mail.getComment(),"text/html;charset=utf-8");
msgMultipart.addBodyPart(content);
//发送附件
if (null != mail.getAffixUrl() && !"".equals(mail.getAffixUrl())) {
// 添加附件
BodyPart affixPart = new MimeBodyPart();
//DataSource类表示本地文件和服务器可以直接访问的资源,它是一个抽象类,用其子类FileDataSource来创建。
DataSource source = new FileDataSource(mail.getAffixUrl());
// 添加附件的内容,附件被封装到一个DataHandler对象
affixPart.setDataHandler(new DataHandler(source));
//设置附件文件名
String affixName = null;
// 附件名称因为要有后缀名,否则将无法读取和下载,所以要从affix_url中获取!
if (mail.getAffixUrl().contains("//")) {
int i = mail.getAffixUrl().lastIndexOf("//");
affixName = mail.getAffixUrl().substring(i + 2);
} else if (mail.getAffixUrl().contains("\\")) {
int i = mail.getAffixUrl().lastIndexOf("//");
affixName = mail.getAffixUrl().substring(i + 1);
} else {
affixName = mail.getAffixUrl();
}
// javamail支持对base64编码的邮件解码,添加附件的标题 **这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
BASE64Encoder enc = new BASE64Encoder();
// affixPart.setFileName("=?utf-8?B?"+enc.encode(affixName.getBytes())+"?="); MimeUtility
//MimeUtility.encodeWord可以避免文件名乱码
try {
affixPart.setFileName(MimeUtility.encodeWord(affixName));
} catch (UnsupportedEncodingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
System.err.println(mail.getSubject() + "邮件发送附件中……");
msgMultipart.addBodyPart(affixPart);
}
// 将multiPart对象放到message中
message.setContent(msgMultipart);
// 保存邮件
message.saveChanges();
/**发送邮件
* 邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和 Store。
* Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。
*/
Transport transport = session.getTransport("smtp");
// 链接服务器的邮箱
transport.connect(Mail.HOST, Mail.USER,Mail.PASSWORD);
// 把邮件发送出去
System.err.println(mail.getSubject() + "邮件发送中……");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.err.println(mail.getSubject() + "邮件发送成功");
}
}
Test测试
public class TestMail {
public static void main(String[] args) throws MessagingException {
Mail mail = new Mail();
mail.setTo("xxx");
mail.setSubject("测试");
// mail.setComment("12345123");
// 发送html或文本
mail.setComment("<h1>hello!</h1><a href="+"http://www.baidu.com"+">www.baidu.com</a>");
//抄送
mail.setToOther("xx");
mail.setAffixUrl("C:\\Users\\admin\\Desktop\\sa.txt");
Mail.SendMail(mail);
}
}
public class TestMail {
public static void main(String[] args) throws MessagingException {
Mail mail = new Mail();
mail.setTo("xxx");
mail.setSubject("测试");
// mail.setComment("12345123");
// 发送html或文本
mail.setComment("<h1>hello!</h1><a href="+"http://www.baidu.com"+">www.baidu.com</a>");
//抄送
mail.setToOther("xx");
mail.setAffixUrl("C:\\Users\\admin\\Desktop\\sa.txt");
Mail.SendMail(mail);
}
}
邮件收到效果