您的位置:首页 > 编程语言 > Java开发

javaMail 发送邮件(附件及正文)

2014-11-28 00:00 323 查看
推荐链接:

http://www.blogjava.net/xixidabao/archive/2006/09/19/70499.aspx

http://www.cnblogs.com/yejg1212/archive/2013/06/01/3112702.html

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方法......


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);
&nb
7fe0
sp;     // 加载发件人地址
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);
}
}


邮件收到效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: