java邮件自动发送时添加网络附件

查了很多资料都是使用本地资源作为附件发送。但是数据和程序分开时,还需要先下载数据,保存到本地再发送邮件。查了很多资料后,发现apach提供了很好的一个commons-mail.jar包,做了很好的封装,简单易用。下载地址是http://commons.apache.org/proper/commons-email/download_email.cgi

public void sendHtmlEmailWithImg() throws Exception {  
        String htmlEmailContent = "这是一张用于测试的图片,请查收。  "  
                + " ";  
        ImageHtmlEmail email = new ImageHtmlEmail();//用ImageHtmlEmail来发送  
        email.setDebug(true);//可以看到执行过程的debug信息  
        email.setCharset("UTF-8");//防止乱码  
        email.setSSLCheckServerIdentity(true);  
        email.setSslSmtpPort("465"); // 设定SSL端口  
          
        //解析本地图片和网络图片都有的html文件重点就是下面这两行;  
        //ImageHtmlEmail通过setDataSourceResolver来识别并嵌入图片  
        //查看DataSourceResolver的继承结构发现有几个好用的子类  
        DataSourceResolver[] dataSourceResolvers =   
                new DataSourceResolver[]{new DataSourceFileResolver(),//添加DataSourceFileResolver用于解析本地图片  
                new DataSourceUrlResolver(new URL("http://"))};//添加DataSourceUrlResolver用于解析网络图片,注意:new URL("http://")  
        //DataSourceCompositeResolver类可以加入多个DataSourceResolver,  
        //把需要的DataSourceResolver放到一个数组里传进去就可以了;  
        email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers));  
                 // 邮箱登陆信息
        email.setHostName("smtp.qq.com");  
        email.addTo("*@qq.com", "Jo");  
        email.setFrom("*@qq.com", "Me"); // 必须和登陆邮箱名一致,否则会报错 
        email.setAuthenticator(new DefaultAuthenticator("*@qq.com", "********")); // 邮箱名和登陆密码  
        email.setSubject("发送一张图片,看看是否可以收到。");  
          
        email.setHtmlMsg(htmlEmailContent);  
  
        //如果客户端不去持HTML格式会显示这句话,不过应该很少有不支持HTML格式的客户端了吧  
        email.setTextMsg("你的邮箱客户端不支持HTML格式邮件");  
        email.send();  
    }  

如果使用QQ邮箱做测试需要注意,QQ邮箱对图片显示不太友好,需要点击显示图片才能显示。

ImageHtmlEmail也可以直接添加网络资源作为附件

/**
	 * 为邮件添加附件
	 * @param email 邮件
	 * @param urls 附件链接
	 * @param names 附件名称,最好有后缀名才能预览文件
	 */
	public void addAttachment(ImageHtmlEmail email, List urls, List names) {
		// 保证附件名的长度和链接一一对应
		while(urls.size() > names.size()) {
			names.add("");
		}
		
		for(int i = 0; i < urls.size(); i++) {
			EmailAttachment attachment = new EmailAttachment();
			 try {
				attachment.setURL(new URL(urls.get(i)));
				attachment.setDisposition(EmailAttachment.ATTACHMENT);
//				attachment.setDescription("Apache logo");
				attachment.setName(names.get(i));
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				email.attach(attachment); // 将附件添加到邮件中
			} catch (EmailException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

你可能感兴趣的:(java)