新規投稿
フォローする

Gmail添付ファイルの文字化けについて

添付ファイル付きのGmailメッセージをkintoneに自動的にアップロードを参考にGmailからメールを取得することができました。

ただし、注意事項の1に記載があるように添付ファイル名に日本語が含まれている場合、文字化けをしてしまいます。

utf-8でないため、文字化けをしているのだと思いますが、文字化けをしないほうほうはないのでしょうか?

もしわかる方がいらっしゃいましたらご教授ください。

/*

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

* Copyright (c) 2018 Cybozu

*

* Licensed under the MIT License

*/

'use strict';

var domain = "ドメイン";

var appId = {アプリID};

var apiToken = "APIトークン";

var appName = "アプリ名";

function replaceCharacters(str) {

    return str

        .replace(/"/g, "\'")

        .replace(/\n/g, "\\n")

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

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

    }

}
0

0件のコメント

サインインしてコメントを残してください。