添付ファイルの重複についてー添付ファイル付きのGmailメッセージをkintoneに自動的にアップロード

お世話になっております。

下記のサイトを参考に、Gmailの受信メールをkintonへ連携しております。https://cybozudev.zendesk.com/hc/ja/articles/360000744546

メールにPDFの添付ファイルが2件あり、【ガラス交換】、【リシェント】というファイル名なのですが、

こちらがkintoneに連携された場合、添付されたファイルを開くと、【ガラス交換】がなく、【リシェント】が2件連携されています。

ファイル名が日本語のため、kintone上では「???」というファイル名で2件が連携されておりますが、両ファイルとも【リシェント】でした。

ファイル名を【ガラス交換】⇒「A」、【リシェント】⇒「B」と変更をして、送信した場合は、正常に「A」と「B」が連携されました。ファイル名を変更する以外で、【ガラス交換】【リシェント】が正常に連携される方法があれば、教えていただけないでしょうか。

※お客様からのメールを転送しているため、ファイル名を制御するのが難しい状況です。

下記がコードとなります。よろしくお願いいたします。

/*

* 添付ファイル付のGmailメッセージをkintoneに自動的にアップロード

* Copyright (c) 2018 Cybozu

*

* Licensed under the MIT License

*/

‘use strict’;

var domain = “group.cybozu.com”;

var appId = 581;

var apiToken = “yUmnJbVAsivRgqAuWeihL9ltKzqKNkDJLFhJ***”;

var appName = “ISS(テスト中)”;

function replaceCharacters(str) {

    return str

        .replace(/"/g, “'”)

        .replace(//g, "")

        .replace(/\r/g, “\r”)

        .replace(/\t/g, “\t”);

}

function uploadAttachment(attachment) {

    var blob = attachment.copyBlob();

    // Make a POST request with form data.

    var formData = {

        ‘file’: blob

    };

    var formHeader = {

        ‘X-Requested-With’: ‘XMLHttpRequest’,

        ‘X-Cybozu-API-Token’: apiToken

    };

    // Because payload is a JavaScript object, it will be interpreted as

    // as form data. (No need to specify contentType; it will automatically

    // default to either ‘application/x-www-form-urlencoded’

    // or ‘multipart/form-data’)

    var options = {

        ‘method’: ‘post’,

        ‘headers’: formHeader,

        ‘payload’: formData

    };

    return UrlFetchApp.fetch(‘https://’ + domain + ‘/k/v1/file.json’, options);

}

function getGmailMessage() {

    // Get all unread threads with the subject in inbox

    var threads = GmailApp.search(‘is:unread to:(kanagawa-iss@***)’);

    var records = ‘[’;

    for (var i = 0; i < threads.length; i++) {

        var messages = threads[i].getMessages();// Get messages

        for (var j = 0; j < messages.length; j++) {

            var message = messages[j];

            if(message.isUnread()) { // スレッド内の未読メールのみ対象

                var attachments = message.getAttachments();

                var fileKeys = ‘’;

                for (var k = 0; k < attachments.length; k++) {

                    Logger.log(‘Message “%s” contains the attachment “%s” (%s bytes)’,

                        message.getSubject(), attachments[k].getName(), attachments[k].getSize());

                    var fileKey = uploadAttachment(attachments[k]);

                    if (fileKey !== null) {

                        fileKeys += fileKey + ‘,’;

                    }

                }

                records += Utilities.formatString(‘{“name”: { “value”: “%s” }’,

                    replaceCharacters(message.getFrom()));//送信者の名前の取得

                records += ‘,’ + Utilities.formatString(‘“email” : { “value”: “%s” }’,

                    replaceCharacters(message.getReplyTo()));//送信者のメールアドレス取得

                records += ‘,’ + Utilities.formatString(‘“subject” : { “value”: “%s” }’,

                    replaceCharacters(message.getSubject()));//メール題目の取得

                records += ‘,’ + Utilities.formatString(‘“message” : { “value”: “%s” }’,

                    replaceCharacters(message.getPlainBody()));//メッセージの取得

                if (fileKeys.length > 0) {

                    if (fileKeys.match(‘,$’)) {

                        fileKeys = fileKeys.substring(0, fileKeys.length - 1);

                    }

                    records += ‘,’ + Utilities.formatString(‘“Attachment”:{“value”:[ %s ]}’, fileKeys);//File Keyの設定

                }

                records += ‘},’;

                message.markRead(); // Mark as read

            }

        }

    }

    if (records.match(‘,$’)) {

        records = records.substring(0, records.length - 1);

    }

    records += ‘]’;

    Logger.log(‘Response JSON is “%s”’, records);

    return records;

}

function sendToKintone() {

    Logger.log(‘Function called’);

    var apps = {

        YOUR_APPLICATION1: {

            appid: appId,

            name: appName,

            token: apiToken

        }

    };

    var manager = new KintoneManager.KintoneManager(domain, apps);// ライブラリーの初期化

    var records = JSON.parse(getGmailMessage());// JSON形式に変換

    if (records.length > 0) { //レコードが存在するときのみ生成

        var response = manager.create(“YOUR_APPLICATION1”, records);//kintone レコードの生成

        // ステータスコード

        // 成功すれば200になる

        var code = response.getResponseCode();

        Logger.log(‘Response code is “%s”’, code);

    } else {

        Logger.log(‘No record found’);

    }

}

回答ではないですが、

APIトークンやサブドメインやメールアドレス隠したほうが良いと思います。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。