1,脱离了IDE,在控制台CMD发mail,除了commons-email-1.2.jar,还需要(间接)依赖哪些jar包?
答案是黄色部分的文字:
如果jar加载不全,就会有类似下面的异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/mail/EmailException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.xxx.util.MailSender. Program will exit.
PS:classes是com的父目录,com是xxx的父目录……。MailSender如果有package结构,需要注意这点
如果是在Linux的shell下,执行同样的class,是这样的:
CLASSPATH=.
for jar in ./*.jar
do
#notice the file sperator in Linux is : but not ; in Windows
CLASSPATH=$CLASSPATH:$jar
done
echo "$CLASSPATH"
java -classpath $CLASSPATH com.andy.util.MailSender&
2,正确的发Mail姿势是什么?注意注释:
/**
* @para email : like this --> SimpleEmail email = new SimpleEmail();
**/
public static void sendMail(
Email email,
boolean throughtProxy,
String receiverAddrs,
String mailSubject,
String mailCharset,
String mailMessage){
//email.setSSL(Boolean.TRUE);//如果需要SSL,则打开
//email.setSslSmtpPort("465");
//不要乱打开这个开关。要看邮件发送服务是不是使用这个安全协议,否则就会抛异常:javax.net.ssl.SSLHandshakeException
//email.setTLS(true); //如果需要TLS,则打开
email.setHostName(smtpServer);
email.setAuthentication(senderAddr, senderPassword);
//如有需要,设置代理
if(throughtProxy){
Properties props = System.getProperties();
props.setProperty("proxySet", "true");
props.setProperty("socksProxyHost", socksProxyIp);
props.setProperty("socksProxyPort", socksProxyPort);
}
try{
email.setFrom(senderAddr, senderDisplayName);//发件人
email.setSubject(mailSubject);//邮件题目
email.setCharset(mailCharset);//邮件编码,如("GB2312");
email.setMsg(mailMessage);//邮件正文
//收件人,可多个
String[] receivers = receiverAddrs.split(";");
for(int i = 0; i< receivers.length; i++){
if(RegexpValidation.isValidMailAddress(receivers[i])){//合法mail地址判定
email.addTo(receivers[i]);
}
}
email.send();
} catch (EmailException e) {
e.printStackTrace();
}
}