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

推荐链接:

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


邮件收到效果

javaMail 发送邮件(附件及正文)_第1张图片

你可能感兴趣的:(javaMail 发送邮件(附件及正文))