質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
mBaaS

mBaaSとはモバイルアプリケーションでの利用に特化したBaaSです。スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供しています。

SendGrid

SendGridは、米SendGrid社のクラウド型メール配信サービス。アカウントを作成するだけですぐに利用することが可能です。さらに到達率向上のための送信ドメイン認証対応や、柔軟性のあるスケーラビリティなど多くの機能を有します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

1017閲覧

ニフティMbaaSのScriptとSendGridでメール配信したい

hitomi_

総合スコア10

mBaaS

mBaaSとはモバイルアプリケーションでの利用に特化したBaaSです。スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供しています。

SendGrid

SendGridは、米SendGrid社のクラウド型メール配信サービス。アカウントを作成するだけですぐに利用することが可能です。さらに到達率向上のための送信ドメイン認証対応や、柔軟性のあるスケーラビリティなど多くの機能を有します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2020/07/11 02:28

編集2020/07/11 02:41

ニフクラMbaaSのScriptとSendgridを利用してメール配信できるアプリを作りたいのですが、エラーが出てしまうScriptがあります。(全部で8個のパターンを作りましたが、1つだけエラーになりメール配信ができません)
以下、HTMLのコードです。

html&javascript

1<!DOCTYPE HTML> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, user-scalable=no"> 6 <script src="components/loader.js"></script> 7 <link rel="stylesheet" href="components/loader.css"> 8 <link rel="stylesheet" href="css/styles.css"> 9 <script src="js/ncmb-latest.min.js"></script> 10 <script src="js/app.js"></script> 11 <script src="js/cssua.min.js"></script> 12 <link rel="stylesheet" href="css/style.css"> 13 </head> 14 <body data-role="none" class="body"> 15 <ons-page> 16 <div class="body"> 17 <div data-role="page" id="MainPage"> 18 <header class="header"> 19 <img src="img/header.png" class="header-image"> 20 </header> 21 <div class="siteContent"> 22 <div data-role="none" class="status"> 23 <form data-role="none" name="status" method="post" action="#"> 24 <div data-role="none" class="status1"> 25 ステータス: 26 </div> 27 <div data-role="none" class="status2"> 28 <input data-role="none" type="text" name="open_status" id="open_status" class="open_status"> 29 </div> 30 <div data-role="none" class="status3"> 31 <input type="button" data-role="none" class="btn-flat-border" onClick="statusChange();" value="変更"> 32 </div> 33 </form> 34 </div> 35 <div class="input_data"> 36 <h3>情報入力</h3> 37 <div class="bottom_space"> 38 <span onclick="onClick(this)" id="your_data" class="btn-flat-logo"> 39 あなたの情報を入力する 40 </span> 41 </div> 42 <div class="bottom_space"> 43 <span onclick="onClick(this)" id="moshimo" class="btn-flat-logo"> 44 もしもの情報を入力する 45 </span> 46 </div> 47 <div class="bottom_space"> 48 <span onclick="onClick(this)" id="share" class="btn-flat-logo"> 49 共有者情報を入力する 50 </span> 51 </div> 52 </div> 53 </div> 54 <div> 55 <h3>このアプリについて</h3> 56 <div class="bottom_space"> 57 <span onclick="onClick(this)" id="howto" class="btn-flat-logo-r"> 58 使い方を見る 59 </span> 60 </div> 61 <div class="bottom_space"> 62 <span onclick="onClick(this)" id="creator" class="btn-flat-logo-r"> 63 アプリの情報 64 </span> 65 </div> 66 </div> 67 </div> 68 </div> 69 </ons-page> 70 <script language="javascript" type="text/javascript"> 71 //読み込み時処理 72 $(document).ready( function(){ 73 Load(); 74 }); 75 function Load(){ 76 var Kihon = ncmb.DataStore("kihon"); 77 var MailAddress = localStorage.getItem('user_mail'); 78 var Status 79 Kihon.equalTo("mailAddress", MailAddress.toString()) 80 .order("idno",false) 81 .fetchAll() 82 .then(function(results){ 83 console.log("検索結果は" + results.length + "件でした。"); 84 var obj = results[0]; 85 if (obj.get('status') == undefined) { 86 document.getElementById('open_status').value = ""; 87 } else { 88 document.getElementById('open_status').value =obj.get('status'); 89 } 90 }) 91 .catch(function(error){ 92 console.log("保存できませんでした"); 93 }); 94 } 95 96 function onClick(harf){ 97 var id_value = harf.id; 98 location.href = id_value + '.html'; 99 } 100 101 function statusChange() { 102 var MailAddress = localStorage.getItem('user_mail'); 103 var Status = document.getElementById('open_status').value; 104 var Kihon = ncmb.DataStore("kihon"); 105 var kihon = new Kihon(); 106 console.log("ステータスを更新します"); 107 Kihon.equalTo("mailAddress", MailAddress.toString()) 108 .order("idno",false) 109 .fetchAll() 110 .then(function(results){ 111 console.log("検索結果は" + results.length + "件でした。"); 112 if (results.length == 0 ) { 113 ons.notification.toast('先にあなたの情報を入力してください', { timeout: 1500, animation: 'default' }) 114 }else{ 115 console.log("データを更新します"); 116 results[0].set('status', Status) 117 return results[0].update() 118 .then(function(results){ 119 console.log("更新できました"); 120 ons.notification.toast('ステータスを変更しました', { timeout: 1500, animation: 'default' }) 121 ShareMail(); 122 }) 123 .catch(function(err){ 124 console.log(err); 125 }); 126 } 127 }) 128 .catch(function(err){ 129 console.log(err); 130 }); 131 } 132 133 function ShareMail(){ 134 var shareMail 135 var mailAddress = localStorage.getItem('user_mail'); 136 var userName 137 var oldName 138 var Status = document.getElementById('open_status').value; 139 var kihon = ncmb.DataStore("kihon"); 140 console.log("メールを送信します"); 141 kihon.equalTo("mailAddress", mailAddress.toString()) 142 .order("idno",false) 143 .fetchAll() 144 .then(function(results){ 145 var obj = results[0]; 146 userName = obj.get("name"); 147 if(obj.get("oldname") == "undefined"){ 148 oldName = ""; 149 }else{ 150 oldName = "(旧姓" + obj.get("oldname") + ")" 151 } 152 }) 153 .catch(function(err){ 154 console.log(err); 155 }); 156 var share = ncmb.DataStore("share"); 157 share.equalTo("mailAddress", mailAddress.toString()) 158 .order("idno",false) 159 .fetchAll() 160 .then(function(results){ 161 for (var c = 0; c < results.length; c++) { 162 var obj = results[c]; 163 shareMail = obj.get("share_mail"); 164 ncmb.Script 165 .data({ 166 "username": userName, 167 "oldname":oldName, 168 "opinionMailAddress": shareMail, 169 "status": Status 170 }) 171 .exec("POST", "changeStatus.js") 172 .then(function(res){ 173 // 実行後処理 174 console.log("success!"); 175 }) 176 .catch(function(err){ 177 // エラー処理 178 console.log(err); 179 console.log("ここでエラー"); 180 }); 181 } 182 ons.notification.toast('共有者にお知らせメールを送信しました', { timeout: 1500, animation: 'default' }) 183 }) 184 .catch(function(err){ 185 console.log(err); 186 }); 187 } 188 </script> 189 </div> 190 </body> 191</html>

以下、scriptファイルです

script

1module.exports = function(req, res) { 2 var apiKey = 'apikey'; 3 var to = req.body.opinionMailAddress; 4 var from = 'moshimo-note@seikatsu.nagoya'; 5 var data = 'to=' + to + '&from=' + from + '&subject=もしもノートからのお知らせ&text=' + req.body.username + req.body.oldname + 'さんがステータスを「' + req.body.status + '」に変更しました。※このメールは送信専用です。&html=<html><body>' + req.body.username + req.body.oldname + 'さんがステータスを「' + req.body.status + '」に変更しました。<BR><BR>※このメールは送信専用です。</body></html></body></html>'; 6 var request = require('superagent'); 7 request 8 .post('https://api.sendgrid.com/api/mail.send.json') 9 .set('Authorization', 'Bearer ' + apiKey) 10 .send(data) 11 .end(function(err, response) { 12 res.status(response.status).json(response.body); 13 } 14 ); 15

以下、エラーの内容です。

log

1{ 2 "Status": "ERROR", 3 "RequestHeaders": "{\"host\":\"script.mbaas.api.nifcloud.com\",\"connection\":\"close\",\"content-length\":\"132\",\"x-ncmb-timestamp\":\"2020-07-11T01:59:51.915Z\",\"x-ncmb-signature\":\"R7kN8jwsr/ta6kVhJeGKzhRhaUR+z7vGLEw1OFRAFr4=\",\"user-agent\":\"Mozilla/5.0 (Linux; Android 9; S1 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.92 Mobile Safari/537.36\",\"sec-fetch-mode\":\"cors\",\"content-type\":\"application/json\",\"accept\":\"text/plain\",\"x-ncmb-sdk-version\":\"javascript-3.0.2\",\"x-ncmb-application-key\":\"d9de5749695e6867d01899a18a45910baf945918cacd700cf6e1f4ae67a4e1fc\",\"origin\":\"file://\",\"x-requested-with\":\"noote.moshimo\",\"sec-fetch-site\":\"cross-site\",\"accept-encoding\":\"gzip, deflate\",\"accept-language\":\"ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7\"}", 4 "RequestQuery": "{}", 5 "ResponseHeaders": "{}", 6 "Error": "ScriptError: /tmp/changeStatus.js:15\n}\n\n\nSyntaxError: Invalid or unexpected token\n at wrapSafe (internal/modules/cjs/loader.js:1072:16)\n at Module._compile (internal/modules/cjs/loader.js:1122:27)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)\n at Module.load (internal/modules/cjs/loader.js:1002:32)\n at Function.Module._load (internal/modules/cjs/loader.js:901:14)\n at Module.require (internal/modules/cjs/loader.js:1044:19)\n at require (internal/modules/cjs/helpers.js:77:18)\n at Module._compile (internal/modules/cjs/loader.js:1158:30)", 7 "Duration": 164, 8 "created_at": "2020-07-11T01:59:52.000Z", 9 "updated_at": "2020-07-11T01:59:52.000Z", 10 "ResponseStatus": 500, 11 "ScriptIdentifier": "changeStatus.js" 12}

何処が悪いのかわかる方がいたら教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

scriptファイルを書き直したら送信できるようになりました。

script

1module.exports = function(req, res) { 2 var apiKey = 'apikey'; 3 var to = req.body.opinionMailAddress; 4 var from = 'moshimo-note@seikatsu.nagoya'; 5 var data = 'to=' + to + '&from=' + from + '&subject=もしもノートからのお知らせ&text=' + req.body.username + req.body.oldname + 'さんがステータスを「' + req.body.status + '」に変更しました。※このメールは送信専用です。&html=<html><body>' + req.body.username + req.body.oldname + 'さんがステータスを「' + req.body.status + '」に変更しました。<BR><BR>※このメールは送信専用です。<BR><BR>家族のためのもしもノート ダウンロードは<a href="https://seikatsu.nagoya/moshimo-note/">こちらから</a><BR></body></html></body></html>'; 6 var request = require('superagent'); 7 request 8 .post('https://api.sendgrid.com/api/mail.send.json') 9 .set('Authorization', 'Bearer ' + apiKey) 10 .send(data) 11 .end(function(err, response) { 12 res.status(response.status).json(response.body); 13 } 14 ); 15}

何かがおかしかったみたいです

投稿2020/07/11 02:40

hitomi_

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問