お世話になっております。
下記のサイトを参考に、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’);
}
}