2013-07-29 2 views
0

나는 사용자가 양식을 채울 때 전자 메일을 보내는 간단한 응용 프로그램을 개발해 왔습니다.Mail API 무료 청구 (결제 없음)?

자습서를 읽고 예제 코드를 복사했습니다. 그러나 나는 다음과 같은 예외가 발생 그것을 실행하려고하면

javax.servlet.ServletContext log: Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract int com.pablo.pabloweb.client.communication.SendEmailService.send(java.lang.String)' threw an unexpected exception: com.google.apphosting.api.ApiProxy$FeatureNotEnabledException: The Socket API will be enabled for this application once billing has been enabled in the admin console. at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) ...

내 질문은 : 결제 세부 정보를 설정하지 않고 메일 API를 사용할 수있는 방법이 있습니까? 내 응용 프로그램이 어떤 한도로 한계를 따라 잡을 가능성이 없습니다.

이 필요한 경우

이 예외의 원인이되는 코드입니다 : 당신은 그냥 자신에게 메일을 보내는 경우가 가장 높은 할당량을 가지고로

public boolean actualSend(String msgText, String subject) { 
    Properties props = new Properties(); 
    Session session = Session.getDefaultInstance(props, null); 

    try { 
     Message msg = new MimeMessage(session); 
     msg.setFrom(new InternetAddress("admin-gmail-email-address")); 
     msg.addRecipient(Message.RecipientType.TO, 
         new InternetAddress("another-personal-email-address")); 
     msg.setSubject(subject); 
     msg.setText(msgText); 
     Transport.send(msg); 
     return true; 
    } catch (AddressException e) { 
     return false; 
    } catch (MessagingException e) { 
     return false; 
    } 
} 

답변

2

는 다음 MailService 인터페이스의 sendToAdmins 방법을 사용을 : https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/mail/MailService#sendToAdmins(com.google.appengine.api.mail.MailService.Message)

그런데 앱에 소켓 예외가 발생합니다. 즉, 런타임에 포함 된 JavaMail 클래스를 사용하지 않기 때문에 실제로 App Engine 메일 서비스를 사용하지 않는 것입니다.

어쨌든 저수준 Mail API로 전환하고 sendToAdmins를 사용하는 것이 좋습니다. 하지만 그렇게하지 않으면 포함 된 JavaMail 클래스를 앱과 함께 업로드하는 대신 사용해보십시오.

+0

감사합니다.이 해결책 인 것 같습니다. "필요한 모든 JavaMail 클래스가 App Engine SDK에 포함되어 있습니다. Oracle® JavaMail JAR을 앱에 추가하지 마십시오. 앱에서 예외가 발생합니다." 그러나 jar 파일을 제거하면 "java.lang.NoClassDefFoundError : javax/mail/internet/AddressException" – NublicPablo

+0

이미 다른 문제가 발생합니다. appengine-api-1.0-sdk. * .jar 파일을 추가하여 경로를 작성하지 않았습니다. 이제 효과가 있습니다. – NublicPablo

+0

다행 이네요. –