xpage-csjs代码没有通过gmailapi以正确格式的电子邮件发送内联图像和附件

xpage csjs code not sending inline images and attachment in proper format email thru gmail api

本文关键字:电子邮件 图像 格式 代码 gmailapi xpage-csjs      更新时间:2023-09-26

我的xpage有以下字段

  1. 带有evo:InputRichtext的Xpage来自以下片段:
  2. 我正在使用gmailapi发送电子邮件
  3. 我正在Ckeditor中添加格式化文本、内联图像和文件
  4. 使用按钮使用csjs从to、Subject和Ckeditor组件中获取值
  5. 通过gmail服务器发送的消息,但未接收到wysiwyg格式。不显示图像,只显示文件名

我知道这是跨平台编码的问题,我不知道那是什么。

这是按钮代码:

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);

这里是我使用的gmailapi功能与来自gmailapi站点的现有身份验证

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);
            });

        }

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

  • HTML将是text/HTML部分
  • 图像将类似于图像/jpeg或图像/png部分
  • 附件将类似于应用程序/pdf部分

它们在一个多部分结构中连接在一起。

内联图像应作为父"multipart/related"mime部分的同级。如果存在附件,则它们位于"多部分/混合"父项下。

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

  • 多部分/混合
    • 多部分/相关
      • text/html
      • 图像/jpeg
      • 图像/jpeg
    • 应用程序/pdf

当您调用CKEditor的getData函数时,您只得到text/html/mime部分html中的一些标签引用了某个位置的图像。它将绝对不包含有关附件的信息。

图像可以通过三种不同的方式进行参考

  1. 作为指向某个internet位置的href。即href="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的同级存储的地方,正如我上面所描述的那样。图像将具有"inline"的内容处置,并且它将具有内容ID如果您发送电子邮件,这是您真正想要的格式,因为您可以确保收件人能够看到它们。

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