【问题标题】:GMail API : unable to add an attachment in a draftGMail API:无法在草稿中添加附件
【发布时间】:2014-08-17 05:39:20
【问题描述】:

我可以使用 GMail API 创建简单的纯 html 草稿。

但是当我尝试上传附件时它失败并出现以下错误:

{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Backend Error",
    "reason" : "backendError"
  } ],
  "message" : "Backend Error"
}

这是我的代码,谁能帮帮我?

        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage email = new MimeMessage(session);
        InternetAddress tAddress = new InternetAddress("to@to.in");
        InternetAddress fAddress = new InternetAddress("from@from.in");

        email.setFrom(fAddress);
        email.addRecipient(javax.mail.Message.RecipientType.TO, tAddress);
        email.setSubject("subject");

        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setContent("thebody", "text/plain");
        mimeBodyPart.setHeader("Content-Type", "text/plain; charset=\"UTF-8\"");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(mimeBodyPart);

        mimeBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource("C:\\Users\\David\\Downloads\\test.pdf");

        mimeBodyPart.setDataHandler(new DataHandler(source));
        mimeBodyPart.setFileName("thepdf.pdf");
        String contentType = "application/pdf";
        mimeBodyPart.setHeader("Content-Type", contentType + "; name=\"" + "test.pdf" + "\"");
        mimeBodyPart.setHeader("Content-Transfer-Encoding", "base64");

        multipart.addBodyPart(mimeBodyPart);

        email.setContent(multipart);
        email.writeTo(System.out);

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        email.writeTo(bytes);
        String encodedEmail = Base64.encodeBase64URLSafeString(bytes.toByteArray());
        Message message = new Message();
        message.setRaw(encodedEmail);

        Draft draft = new Draft();
        draft.setMessage(message);
        draft = new Gmail(new NetHttpTransport(), new JacksonFactory(), getCredential()).users().drafts().create("me", draft).execute();

【问题讨论】:

    标签: gmail-api


    【解决方案1】:

    我认为该代码是合理的。你能提供 email.writeTo(System.out) 的输出来确认吗?似乎是 Gmail API 中的一个错误。

    这对任何特定用户都可以重复吗? (它总是失败还是最终会起作用?)

    是针对所有用户还是仅针对某些用户(例如,它是否适用于 gmail.com 用户而不适用于 Google Apps 用户)?

    【讨论】:

      【解决方案2】:

      问题第二天自行解决!我不知道 GMail API 团队是否修复了某些问题,或者它是否是一个临时错误。

      【讨论】:

      【解决方案3】:

      试试这个希望,让它的工作首先放置文本内容,然后正确显示 html 内容

      MimeBodyPart textPart = new MimeBodyPart();
              textPart.setText("This is actual message", "utf-8");
      
              MimeBodyPart htmlPart = new MimeBodyPart();
              htmlPart.setContent("<h1>This is a test</h1>"
                      + "<img src=\"http://www.rgagnon.com/images/jht.gif\">", "text/html; charset=utf-8");
              Multipart multipart = new MimeMultipart();
      
              multipart.addBodyPart(textPart);<--first 
              multipart.addBodyPart(htmlPart);<--seocnd 
              message.setContent(multipart)
      

      【讨论】:

        猜你喜欢
        • 2017-05-01
        • 2019-10-14
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 2018-02-20
        • 2018-04-14
        • 2016-06-09
        相关资源
        最近更新 更多