部分源码阅读
进入send() 后
// 进入send()
(tos, "测试邮件", "邮件来自Zyred问候沙雕的邮件, 晚上好!", false);
/**
* 使用配置文件中设置的账户发送邮件,发送给多人
*
* @param tos 收件人列表
* @param subject 标题
* @param content 正文
* @param isHtml 是否为HTML
* @param files 附件列表
*/
public static void send(Collection<String> tos, String subject, String content, boolean isHtml, File... files) {
send(tos, null, null, subject, content, isHtml, files);
}
/**
* 使用配置文件中设置的账户发送邮件,发送给多人
*
* @param tos 收件人列表
* @param ccs 抄送人列表,可以为null或空
* @param bccs 密送人列表,可以为null或空
* @param subject 标题
* @param content 正文
* @param isHtml 是否为HTML
* @param files 附件列表
* @since 4.0.3
*/
public static void send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
send((), true, tos, ccs, bccs, subject, content, null, isHtml, files);
}
此时你会发现第第一个send()调用了第二个send(),第二个send()中第一个参数好像就是账户对象,果断点进去看看,Ctrl + 鼠标右键,点击INSTANCE,进入该类中,代码如下
package ;
import ;
/**
* 全局邮件帐户,依赖于邮件配置文件{@link MailAccount#MAIL_SETTING_PATH}或{@link MailAccount#MAIL_SETTING_PATH2}
*
* @author looly
*
*/
public enum GlobalMailAccount {
INSTANCE;
private final MailAccount mailAccount;
/**
* 构造
*/
GlobalMailAccount() {
mailAccount = createDefaultAccount();
}
/**
* 获得邮件帐户
*
* @return 邮件帐户
*/
public MailAccount getAccount() {
return ;
}
/**
* 创建默认帐户
*
* @return MailAccount
*/
private MailAccount createDefaultAccount() {
MailAccount mailAccount = null;
try {
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH);
} catch (IORuntimeException e) {
//ignore
}
// 寻找config/
if(null == mailAccount) {
try {
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH2);
} catch (IORuntimeException e) {
//ignore
}
}
// 寻找
if(null == mailAccount) {
try {
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH3);
} catch (IORuntimeException e) {
//ignore
}
}
return mailAccount;
}
}
注意看createDefaultAccount()方法中,是如何创建MailAccount对象的,我们再看看try中 new MailAccount(MailAccount.MAIL_SETTING_PATH); MailAccount.MAIL_SETTING_PATH代表了什么?
public static final String MAIL_SETTING_PATH = "config/";
public static final String MAIL_SETTING_PATH2 = "config/";
public static final String MAIL_SETTING_PATH3 = "";
此时此刻浮现在眼前的是三个不同的路径,然后我们再回到 GlobalMailAccount#createDefaultAccount(),
private MailAccount createDefaultAccount() {
MailAccount mailAccount = null;
try {
// 读取 config/
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH);
} catch (IORuntimeException e) {
//ignore
}
// 寻找config/
if(null == mailAccount) {
try {
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH2);
} catch (IORuntimeException e) {
//ignore
}
}
// 寻找classpath下的
if(null == mailAccount) {
try {
mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH3);
} catch (IORuntimeException e) {
//ignore
}
}
return mailAccount;
}
现在明白了吗?
菜鸟的记录,有错误请多多指教,相互学习,谢谢!!