# Gmail 添付ファイルをKintoneに登録

**URL:** <https://community.cybozu.dev/t/topic/8496>\
**Category:** kintone 開発相談\
**Created:** [2023 年 12 月 19 日午前 6:31 UTC](https://community.cybozu.dev/t/topic/8496 "2023-12-19T06:31:39Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![okada](https://avatars.discourse-cdn.com/v4/letter/o/3be4f8/32.png) [@okada](https://community.cybozu.dev/u/okada)\
**Post date:** [2023 年 12 月 19 日午前 6:31 UTC](https://community.cybozu.dev/t/topic/8496/1 "2023-12-19T06:31:39Z")

</div>

### 何を実現したいのかを書きましょう

お世話になっております。  
こちらの記事を参考にGmailに届いたメールをKintoneに登録されるようにしたかったのですが、うまくいきませんでした。  
ご意見や解決方法のご教示をお願いいたします。  
[添付ファイル付きのGmailメッセージをkintoneに自動的にアップロード](https://cybozu.dev/ja/kintone/tips/development/3rd-party-services/mail/upload-gmail-to-kintone-with-attachment/)

記事内ではタイトルで条件をしているのですが、宛先で条件指定しています。

### 発生した問題やエラーメッセージを具体的に書きましょう

お聞きしたいのは2点になります。

・記事内の動作確認step2で「sendTokintone」の選択肢が出てこない  
・試しにデバックをしたところエラーメッセージが出てくる  
構文エラー: SyntaxError: Invalid shorthand property initializer 行: 10 ファイル: コード.gs

### 実行したコードをコピー＆ペーストしましょう

ドメイン名・宛先メール・apiTokenのみ伏字にさせていただいています。

‘use strict’;  
const domain = ‘{〇〇〇}.cybozu.com’;  
const appId = {app=365};  
const apiToken = ‘{〇〇〇}’;  
const appName = ‘{Gmail請求書}’;

// 添付ファイルをアップロードする  
function uploadAttachment(attachment) {  
const blob = attachment.copyBlob();  
const formData = {  
file: blob  
};  
const formHeader = {  
‘X-Requested-With’: ‘XMLHttpRequest’,  
‘X-Cybozu-API-Token’: apiToken  
};  
const options = {  
method: ‘post’,  
headers: formHeader,  
payload: formData  
};  
const res = UrlFetchApp.fetch(‘https://’ + domain + ‘/k/v1/file.json’, options);  
return JSON.parse(res.getContentText());  
}

// 検索条件に合った受信メールを取得する  
function getGmailMessage() {  
// 指定した宛先で添付ファイル付未読メールのみ取得  
const threads = GmailApp.search(‘is:unread to:(〇〇〇@gmail.com) has:attachment’);

const recordObjs = ;  
for (let i = 0; i \< threads.length; i++) {  
const messages = threads[i].getMessages();// Get messages  
for (let j = 0; j \< messages.length; j++) {  
const recordObj = {};  
const message = messages[j];  
if (message.isUnread()) { // スレッド内の未読メールのみ対象  
const attachments = message.getAttachments();  
const fileKeysArray = ;  
for (let k = 0; k \< attachments.length; k++) {  
fileKeysArray.push(uploadAttachment(attachments[k]));  
}  
if (fileKeysArray.length \> 0) {  
recordObj.Attachment = {value: fileKeysArray};  
}

```
    // メールの送信者
    recordObj.name = {value: message.getFrom()};
    // 送信元メールアドレス
    recordObj.email = {value: message.getReplyTo()};
    // メールの件名
    recordObj.subject = {value: message.getSubject()};
    // メールの本文
    recordObj.message = {value: message.getPlainBody()};

    // 既読にする
    message.markRead();
  }
  recordObjs.push(recordObj);
}

```

}  
return recordObjs;  
}

function sendToKintone() {  
const apps = {  
YOUR\_APPLICATION1: {  
appid: appId,  
name: appName,  
token: apiToken  
}  
};

const manager = new KintoneManager.KintoneManager(domain, apps);  
const records = getGmailMessage();

// recordsにメールの情報が取得できた場合にのみkintoneにPOSTする  
if (records.length \> 0) {  
const response = manager.create(‘YOUR\_APPLICATION1’, records);  
// 成功すればcodeに200が返る  
const code = response.getResponseCode();  
Logger.log(‘Response code is “%s”’, code);  
} else {  
Logger.log(‘No record found’);  
}  
}

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2023 年 12 月 19 日午前 6:48 UTC](https://community.cybozu.dev/t/topic/8496/2 "2023-12-19T06:48:12Z")

</div>

> [@okada](#):
>
> const apiToken

のAPIトークンはもっとダミーとはっきりわかるものにしませんか？

---

<div class="post-metadata">

**Author:** ![okada](https://avatars.discourse-cdn.com/v4/letter/o/3be4f8/32.png) [@okada](https://community.cybozu.dev/u/okada)\
**Post date:** [2023 年 12 月 19 日午前 6:50 UTC](https://community.cybozu.dev/t/topic/8496/3 "2023-12-19T06:50:15Z")

</div>

ご指摘ありがとうございます。  
取り急ぎ修正させてもらいました。

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2023 年 12 月 19 日午前 6:52 UTC](https://community.cybozu.dev/t/topic/8496/4 "2023-12-19T06:52:56Z")

</div>

> [@okada](#):
>
> const appId = {app=365};

を実行すると  
Uncaught SyntaxError: Invalid shorthand property initializer  
というエラーがでました。

本当に

```javascript
const appId = {app=365};

```

と指定するのが正しいのですか？記事は、ここに差し込みますよという意味なのではないでしょうか？

---

<div class="post-metadata">

**Author:** ![okada](https://avatars.discourse-cdn.com/v4/letter/o/3be4f8/32.png) [@okada](https://community.cybozu.dev/u/okada)\
**Post date:** [2023 年 12 月 19 日午前 7:00 UTC](https://community.cybozu.dev/t/topic/8496/5 "2023-12-19T07:00:20Z")

</div>

記事内で10行目に関して、アプリIDを指定と掲載されていたので、入力したのですが間違いということでしょうか？

複数の関数で使用する変数を最初に定義します。  
domain には、次のようにご使用のアカウントのフルドメイン名を指定します。（海外アカウントの場合、たとえば US だと{サブドメイン名}.kintone.com のように指定します）  
また、上記で作成したアプリ ID、API トークン、アプリ名を指定します。

10 const appId = {アプリID};

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2023 年 12 月 19 日午前 7:06 UTC](https://community.cybozu.dev/t/topic/8496/6 "2023-12-19T07:06:05Z")

</div>

記事にはここにアプリIDを入れるとしか書いていないのに  
app=という指定方法はどこから出てきたのですか？  
どこにその指定方法が書いてありましたか？

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2023 年 12 月 19 日午前 7:07 UTC](https://community.cybozu.dev/t/topic/8496/7 "2023-12-19T07:07:54Z")

</div>

少なくとも私の環境では、エラーになってしまいます。  
 ![image](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/b47ee7133cbca7ecb09e04366d1edd9ea95fd51a.png)

---

<div class="post-metadata">

**Author:** ![okada](https://avatars.discourse-cdn.com/v4/letter/o/3be4f8/32.png) [@okada](https://community.cybozu.dev/u/okada)\
**Post date:** [2023 年 12 月 19 日午前 7:11 UTC](https://community.cybozu.dev/t/topic/8496/8 "2023-12-19T07:11:44Z")

</div>

![image](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/18f381a47b9c7242692b0bc46eb891e2b3d44c70.jpeg)  
解説でアプリケーションIDと赤枠で囲まれていたので、そちらを記載しておりました。

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2023 年 12 月 19 日午前 7:16 UTC](https://community.cybozu.dev/t/topic/8496/9 "2023-12-19T07:16:20Z")

</div>

Uncaught SyntaxError: Invalid shorthand property initializer  
というエラーは、なぜ発生しているのかについてどのような推測をされているのでしょうか？

---

<div class="post-metadata">

**Author:** ![okada](https://avatars.discourse-cdn.com/v4/letter/o/3be4f8/32.png) [@okada](https://community.cybozu.dev/u/okada)\
**Post date:** [2023 年 12 月 19 日午前 7:28 UTC](https://community.cybozu.dev/t/topic/8496/10 "2023-12-19T07:28:18Z")

</div>

下記に修正したところ、Kintoneに登録することができました。  
const appId =365;

最初にこのように入力したらエラーが出ていたので、赤枠のように入力するのかと先入観に陥ってました。  
const appId ={365}

ご教示ありがとうございます。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2023 年 12 月 22 日午前 7:28 UTC](https://community.cybozu.dev/t/topic/8496/11 "2023-12-22T07:28:59Z")

</div>

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