xpage csjs代码不通过gmail api

时间:2015-10-29 20:09:40

标签: javascript xpages gmail-api

我的xpage有以下字段

  1. 来自this snippet的evo:InputRichtext ckeditor的Xpage:
  2. 我使用gmail api发送电子邮件。
  3. 我在Ckeditor中添加了格式化文本,内联图片和文件
  4. 使用按钮使用csjs从To,Subject和Ckeditor组件获取值。
  5. 通过gmail服务器发送但未收到所见即所得格式的消息。不显示图像,仅显示文件名。
  6. 我知道这是跨平台编码问题,我不知道那是什么。

    这是按钮代码:

    var to = XSP.getElementById("#{id:To}").value;
    var subject = XSP.getElementById("#{id:Subject}").value;
    var richCKEditor = CKEDITOR.instances["#{id:inputRichText1}"]; 
    var dt=richCKEditor.getData();
    var content = richCKEditor.dataProcessor.toHtml(dt);
    
     console.log(to);
     console.log(subject);
     console.log(content);
    
    var email ="From: 'm' <"+to+">\r\n"+
    "To:  "+ to +"\r\n"+
    "Subject: "+subject+"\r\n"+"\r\n"+
    "MIME-Version: 1.0\n"+
    //"Content-Type:  text/html; charset=\"UTF-8\"\n" +
    "Content-Type:  multipart/mixed; \n" +
    content;
    console.log(email);
    auth();
    send(email);
    

    这里的gmail api功能我使用的是gmail api site的现有身份验证

    function send(email) {
    console.log(email);
    sendMessage(email, function (response) {
                    //console.log("Handed to Gmail API for sending");
                     {console.log(response)}
                });
                alert("Message sent");
            }
    
     function sendMessage(email, callback) {
                //auth();
                gapi.client.load('gmail', 'v1',function(){
                    var base64EncodedEmail = btoa("MIME-Version: 1.0\n"+
                            "Content-Type:  text/html; charset=\"UTF-8\"\n" +
                        //  "Content-Type:  multipart/mixed; \n" +
    
                            //"Content-length: 5000\n" +
                            //"Content-Transfer-Encoding: message/rfc822\n"+
                            email).replace(/\//g,'_').replace(/\+/g,'-');
                     // alert("Message sending\n" + base64EncodedEmail.toString());
                    console.log(base64EncodedEmail);
                      var request = gapi.client.gmail.users.messages.send({
                        'userId': 'me',
                        'resource': {
                          'raw': base64EncodedEmail
                        }
                      });
                      request.execute(callback);
                });
    
    
            }
    

1 个答案:

答案 0 :(得分:1)

当您发送带附件和内联图片的Mime电子邮件时,它包含许多部分。

  • HTML将是text / html部分。
  • 图像将类似于image / jpeg或image / png part
  • 附件将类似于application / pdf part

它们都是以多部分结构捆绑在一起的。

内联图片应该作为兄弟姐妹的一部分来定位&#39; multipart / related&#39;哑剧部分。 如果有附件,则它们位于“多部分/混合”部分下面。父节点。

如果你要发送带有附件和内联的mime电子邮件,它将采用以下结构

  • 多部分/混合
    • 多部分/相关
      • text / html的
      • 图像/ JPEG
      • 图像/ JPEG
    • 应用/ PDF

当你调用CKEditor的getData函数时,你只得到text / html mime部分。 在html中是一些引用图像某处的标签。它绝不包含有关附件的信息。

图像可以用3种不同的方式引用

  1. 作为某个互联网位置的href。即。 HREF =&#34; HTTP://someserver.com/someimage.gif" 如果您要发送电子邮件,您可能不希望这样,除非您对收到电子邮件的人感到满意,必须点击“在此电子邮件中显示图片”。此外,您可以确定该图像不是指向电子邮件接收器无法访问的某个Intranet服务器的链接。

  2. 作为数据URI。 https://en.wikipedia.org/wiki/Data_URI_scheme 这是所有图像数据实际位于img src标记内的html中的位置。 CKEditor实际上允许你(在firefox中)以这种格式粘贴图像,但是如果你要发送电子邮件,你也不想允许这种格式,因为每个电子邮件客户端都不支持。 Gmail不会以此格式显示图片。

  3. 作为嵌入式图像。 这是将图像作为兄弟结构存储到mime结构中的text / html的地方,如上所述。该图片将具有“内联”的内容配置。它将具有Content-ID 如果您要发送电子邮件这是您真正想要的格式,因为您可以确定接收方能够看到它们。

  4. 如果您必须完成客户端的所有操作,那么您需要找到一些方法从服务器获取嵌入图像和附件数据以包含在您的调用中。 否则你最好尝试做这个服务器端,但无论如何你需要以某种方式让服务器参与进来。