文章标题+路径问题

前几天被要求加一个发送邮件的小功能,在网上搜了之后发现了commons email,commons email是Apache提供的email API,以Java Mail为基础,进一步简化了操作。这是官网,上面写的很详细,也有使用指导(http://commons.apache.org/proper/commons-email/index.html)。
接下来是要记录一下自己的使用过程,方便以后查阅。(虽然和别人记录的东西都大同小异,没办法,自己现在还没有啥创新的地方,先就酱)

上面需要配置的信息很多,可以将配置信息存在properties文件中。

mail.properties

attachmentPath = "**/**/*.jpg";
attachmentDescription = "description";
attachmentName = "name";
userName = "username";
password = "password";
emailFromName = "from name";
emailFromAdd = "emailAdd";
emailSubject = "subject";
emailMsg = "email message";
emailTo = "the address to send to"; 
import org.apache.commons.mail.*;

public class Test{
    public static void main(String args[]) {
        Test test = new Test();
        test.sendEmail();
    }
    public void sendEmail() {
        //read message from properties file, just like get value by "key"
        Properties prop = new Properties();
        //get properties file's content
        InputStream mailInfo = this.getClass().getResourceAsStream("/mail.properties");
        prop.load(mailInfo);
        String attachmentPath = prop.getProperty("attachmentPath");
        String attachmentName = prop.getProperty("attachmentName");
        String userName = prop.getProperty("userName");
        String password = prop.getProperty("password");
        String emailFromName = prop.getProperty("emailFromName");
        String emailFromAdd = prop.getProperty("emailFromAdd");
        String attachmentDescription = prop.getProperty("attachmentDescription");
        String emailMsg = prop.getProperty("emailMsg");
        String emailSubject = prop.getProperty("emailSubject");

        //create attachment
        EmailAttachment attachment = new EmailAttachment();
        attachment.setDisposition(EmailAttachment.ATTACHMENT);
        attachment.setDescription(attachmentDescription);
        attachment.setPath(attachmentPath);     
        attachment.setName(attachmentName);

        //create email
        Email email = new SimpleEmail();
        email.setHostName("smtp.googlemail.com");
        email.setSmtpPort(465);
        email.setAuthenticator(new DefaultAuthenticator(userName,password));
        email.setSSLOnConnect(true);
        email.setFrom(emailFromAdd,emailFromName);
        email.setSubject(emailSubject);
        email.setMsg(emailMsg);
        email.addTo(emailTo);

        email.attach(attachment);

        email.send();
    }
}
  • 使用的是SimpleEmail类,通过邮件发送基本的文字内容和附件
  • smtp是Simple Mail Transfer Protocal,属于TCP/IP协议簇,smtp.googlemail.com是Gmail的SMTP服务器地址,端口一般是465或者587。要想启用gmail的服务器要先在google邮箱账户中手动启用POP,并且需要授权才能启用服务器发送邮件
  • 支持cc、replyto,在官网中有详细的API文档可以查询使用方法
  • setSSLOnConnect (SSL:Secure Sockets Layer /TSL:Transport Layer Security),设置安全连接

关于项目中读取资源文件,看到写的比较详细的博客,贴在此处。

http://blog.csdn.net/zhanghaipeng1989/article/details/19332489
path 不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath(Src根目录)根下获取。
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。例如你写了一个MyTest类在包com.test.mycode 下,MyTest.class.getResourceAsStream(“name”) 会在com.test.mycode包下查找相应的资源。如果这个name是以 ‘/’ 开头的,那么就会从classpath的根路径下开始查找。
ClassLoader.getResourceAsStream() 无论要查找的资源前面是否带’/’ 都会从classpath的根路径下查找。所以: MyTest.getClassLoader().getResourceAsStream(“/name”) 和
MyTest.getClassLoader().getResourceAsStream(“name”) 的效果是一样的。

  1. Class.getResourceAsStream(String path) :
    path 不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath(Src根目录)根下获取。
    其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

  2. Class.getClassLoader.getResourceAsStream(String path) :
    默认则是从ClassPath根下获取,path不能以’/’开头,最终是由ClassLoader获取资源。

http://ouyangfei0426.iteye.com/blog/1020232
src(源文件夹)

┣━11.properties

┗━myspider(myspider包)

┣━22.properties
┗━Test.java

package myspider;

import java.io.UnsupportedEncodingException;

/**
 *
 * @author mark
 */
public class Test {
    public static void main(String[] args) throws UnsupportedEncodingException{
        Test t=new Test();
        //文件名前不加“/”,则表示从当前类所在的包下查找该资源。如下则表示的是从包myspider下查找22.properties文件资源。
        System.out.println("1:"+t.getClass().getResourceAsStream("22.properties"));//输出java.io.BufferedInputStream@61de33

        //文件名前加了“/”,则表示从类路径下也就是从classes文件夹下查找资源,如下表示从classes文件夹下查找22.properties文件资源。
        System.out.println("2:"+t.getClass().getResourceAsStream("/22.properties"));//输出null

        //文件名前加了“/”,则表示从类路径下也就是从classes文件夹下查找资源,如下表示从classes文件夹下查找11.properties文件资源。
        System.out.println("3:"+t.getClass().getResourceAsStream("/11.properties"));//输出java.io.BufferedInputStream@14318bb
        System.out.println();

        //当前包路径4:file:/E:/myobject/myspider/build/classes/myspider/
        System.out.println("4:"+t.getClass().getResource(""));

        //输出当前类路径5:file:/E:/myobject/myspider/build/classes/
        System.out.println("5:"+t.getClass().getResource("/"));

        /*
         * 如果类路径下的当前包有22.properties文件,则输出6:file:/E:/myobject/myspider/build/classes/myspider/22.properties
         * 否者输出源文件下的22.properties文件的路径,则输出:6:file:/E:/myobject/myspider/src/myspider/22.properties
         */
        System.out.println("6:"+t.getClass().getResource("22.properties"));
        /*
         * 如果类路径下有11.properties文件,则输出7:file:/E:/myobject/myspider/build/classes/11.properties
         * 否者输出源文件下的11.properties文件的路径,则输出:6:7:file:/E:/myobject/myspider/src/11.properties
         */
        System.out.println("7:"+t.getClass().getResource("/11.properties"));

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值