2012-03-30 79 views
1

我创建了一个Java程序,它从我的Gmail帐户发送一封电子邮件。我在Eclipse中编写它,它工作正常。但是,当我试图把它从PHP我得到以下错误拨打:从PHP调用Java程序

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address 
    at sendVerificationEmail.main(sendVerificationEmail.java:3) 
Caused by: java.lang.ClassNotFoundException: javax.mail.Address 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

这里是Eclipse使用命令:

/usr/lib/jvm/java-6-openjdk/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:53094 -Dfile.encoding=UTF-8 -classpath /home/****/dir/to/program/java/bin:/home/****/dir/to/program/java/lib/javamail-1.4.4/mail.jar sendEmail 

这里的命令PHP使用:

exec("java -classpath /home/****/dir/to/program/java/bin:/home/****/dir/to/program/java/lib/javamail-1.4.4/mail.jar sendVerificationEmail $name $email $comments"); 
+3

为什么不使用PHP来发送它? – Ryan 2012-03-30 02:16:09

+0

http://php.net/manual/en/function.mail.php – 2012-03-30 02:17:02

+0

是的,我同意minitech。我不知道为什么你不能使用PHP发送邮件。但是这里有一个链接会告诉你如何在java中执行一个外部程序 - > http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute- external-application-from-java/ – Gohn67 2012-03-30 02:22:05

回答

2

您需要将包含javax.mail ...类的jar文件添加到您的命令中:

例如以下内容()将当前目录和javax.jar添加到类路径:

(linux) java -classpath .:javax.jar com.me.MyMailClient 
(windows) java -classpath .;javax.jar com.me.MyMailClient 

javax.jar是不是会被调用,这只是给你看,你就会把它。要找出Eclipse获取javax.mail。*项目的位置,请查看您的Project-> Properties-> Build Path-> Libraries选项卡。其中列出的一个罐子就是你需要的(你可以通过解压缩来查看罐子的内容)。它可能被称为mail.jar,j2ee.jar,javamail.jar - 有几个不同的候选人。由于您的测试应用程序很简单,因此它应该具有很少的依赖关系,因此您可以轻松找到它。

您需要将此jar文件的副本放在运行脚本附近(以上示例假定它与运行java命令时位于同一目录中)。

希望有所帮助。

1

问题是您的web服务器(对于ex APACHE)无法找到类路径中的java类文件 您需要做的是将CLASSPATH环境变量的类路径更改为Jar/classes在那里,或者将你的classes/jar文件放到APACHE(APACHE/lib)的lib目录中并重新启动服务器。

希望它有帮助