2014-06-11 2 views
1

이 주제가 발견되었습니다 : Exception while using JavaMail with Google AppEngine: How to fix this?javamail과 appengine API를 함께 사용하는 방법은 무엇입니까?

동일한 문제점이 있으며 Javamail API와 GAE API를 함께 사용해야합니다. 이메일을 보내는 데 사용하는 PC에서 실행되는 앱을 만듭니다. 내가 javamail API를 사용하고 잘 작동합니다. 그런 다음 GAE에서 실행되는 앱을 만들어 고객의 의견을 수집 한 다음 Datastore에 저장합니다. 그래서 PC 앱에 Datastore에서 데이터를 가져 오는 데 사용하는 함수를 추가합니다. 그런 다음 appengine-api.jar을 사용해야합니다. 코드는 문제없이 컴파일됩니다. 그러나 런타임 예외가 발생합니다 :

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'mail' or call 'Send()' was not found. 

내가 javax.mail 있다는 것을 알아 *에서 appengine-api.jar을하고 javamail.jar이 아마 충돌의 내부.. 어떤 경우에 테스트 :

사례 1 : javengail.jar을 유지하고 appengine-api.jar을 제거하십시오. 그것은 우편을 보낸다 ok.

사례 2 : javengail.jar을 유지하고 appengine-api.jar 내의 javax 만 제거하십시오. 위의 예외는 여전히 발생합니다.

사례 3 : javamail.jar을 제거하고 appengine-api.jar을 유지하십시오. appengine-api.jar의 javax.mail. *을 사용하여 메일을 보내려고합니다. 그것은 정상적으로 컴파일되지만 위의 예외는 런타임에 발생합니다.

나는이 응용 프로그램을 만들기 위해 명령 줄을 사용합니다. -classpath 변수를 사용하지 않고 필요한 jar 파일을 모두 복사합니다. /jdk1.7.0_55/jre/lib/ext

javamail.jar과 appengine-api.jar을 함께 사용하려면 어떻게해야합니까?

업데이트 : 아마도 내가 명확하게 말하지 않았습니다. 나는 appengine으로부터 메일을 보내지 않는다. 나는 PC 앱에서 보낸다. 해당 PC 응용 프로그램에서 Datastore에서 데이터를 검색하려면 appengine-api.jar을 사용해야합니다. 그래서 내 PC 애플 리케이션에 .jar api 파일이 둘 다 필요합니다.

답변

2

해결되었습니다.

위에서 설명한 것처럼 appengine-api.jar의 javax. * 디렉토리를 완전히 삭제하더라도 작동하지 않습니다./jre/lib/ext에서 해당 jar 파일을 제거한 경우에만 작동합니다. appengine-api.jar에는 여전히 javamail.jar에 영향을주는 많은 "흔적"이 있다고 생각합니다.

jamamail.address.map 
javamail.charset.map 
javamail.providers 

나는 그 3 개 파일을 삭제하고 작동 : 그 jar 파일에보고 후, 나는 javamail.jar에 영향을 줄 수 있습니다에서 appengine-api.jar을/META-INF 3 개 파일이 /가 발견! 이것으로 충분합니다. 더 이상 javax. * 디렉토리를 삭제할 필요가 없습니다.이 3 개의 파일 만 삭제하면됩니다.

나는 이것이 최선의 해결책이라고 생각하지 않지만 지금까지는 javamail을 사용하는 다른 해결책을 찾을 수 없다.jar 및 appengine-api.jar를 PC 응용 프로그램에 설치하십시오.

0

https://developers.google.com/appengine/docs/java/mail/usingjavamail을 읽었습니까? AppEngine에서 메일 전송은 관리 서비스입니다 (소켓을 거치지 않는 한).

개발 서버에서
Properties props = new Properties(); 
Session session = Session.getDefaultInstance(props, null); 

String msgBody = "..."; 

try { 
    Message msg = new MimeMessage(session); 
    msg.setFrom(new InternetAddress("[email protected]", "Example.com Admin")); 
    msg.addRecipient(Message.RecipientType.TO, 
        new InternetAddress("[email protected]", "Mr. User")); 
    msg.setSubject("Your Example.com account has been activated"); 
    msg.setText(msgBody); 
    Transport.send(msg); 

} catch (AddressException e) { 
    // ... 
} catch (MessagingException e) { 
    // ... 
} 

, 어떤 메일이 전송되지 도착하지만 콘솔에 기록됩니다

이 이메일을 보내는 방법입니다

javamail.jar 포함하지 마십시오. 또한 허용 된 발신인에 대한 단락을주의 깊게 읽으십시오. 이는 대개 다음 질문입니다.

+0

알아,하지만 appengine에서 메일을 보내지 않습니다. 나는 PC 앱에서 보낸다. 해당 PC 응용 프로그램에서 Datastore에서 데이터를 검색하려면 appengine-api.jar을 사용해야합니다. – user2859914

관련 문제