невозможно отправить электронное письмо с вложением — Google App Engine

#google-app-engine #jakarta-mail #attachment

#google-app-engine #джакарта-почта #вложение

Вопрос:

я использую почтовую службу App Engine, но не могу отправить письмо, содержащее вложение. Выше приведен код, который реализует обработчик почты и исключение, которое я получаю. Я получаю исключение при попытке отправить сообщение с помощью метода Transport.send (msg).

Mail.java

 public class Mail {

private Properties props;
private Session session;
private Message msg;

public Mail() {
    props = new Properties();
    session = Session.getDefaultInstance(props, null);
    msg = new MimeMessage(session);
}

public void sendMail(String subject, String msgBody, String recipient,
        String recipientName) {
    try {
        msg.setFrom(new InternetAddress("ssantaris@gmail.com", "Sourcebay"));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
                recipient, recipientName));
        msg.setSubject(subject);
        msg.setText(msgBody);
        Transport.send(msg);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void sendMimeMessage(String subject, String msgBody,
        String recipient, String recipientName, byte[] attachment,
        BlobInfo blobInfo) {
    try {

        Multipart mp = new MimeMultipart();
        MimeBodyPart htmlPart = new MimeBodyPart();

        htmlPart.setContent(msgBody, "text/html");
        mp.addBodyPart(htmlPart);

        MimeBodyPart attachmentPart = new MimeBodyPart();
        attachmentPart.setFileName(blobInfo.getFilename());
        attachmentPart.setContent(attachment, blobInfo.getContentType());
        mp.addBodyPart(attachmentPart);

        msg.setContent(mp);
        msg.setFrom(new InternetAddress("ssantaris@gmail.com", "Sourcebay"));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
                recipient, recipientName));

        Transport.send(msg);

    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}
  

Исключение

 javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Converting attachment data failed)
at javax.mail.Transport.send(Transport.java:163)
at javax.mail.Transport.send(Transport.java:48)
at com.sourcebay.server.mail.Mail.sendMimeMessage(Mail.java:77)
at com.sourcebay.server.source.SourceDownloadImpl.downloadSource(SourceDownloadImpl.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:100)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: javax.mail.MessagingException: Converting attachment data failed
at       com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:231)
at javax.mail.Transport.send(Transport.java:95)
... 43 more
  

Заранее спасибо,
Стефанос Антарис

Ответ №1:

Является ssantaris@gmail.com зарегистрированный разработчик / администратор, используемый в учетной записи Google App Engine? Если нет, попробуйте использовать идентификатор электронной почты учетной записи, зарегистрированной как один.

Чтобы установить адрес отправителя, приложение вызывает метод setFrom() для объекта MimeMessage. Отправителем должен быть либо адрес зарегистрированного разработчика приложения, либо адрес пользователя для текущего запроса, вошедшего в систему с помощью учетной записи Google.