メールアドレスをクレンジング
メーリングリストの管理をしていたり、名簿の整理をしていると、メールアドレスを管理したくなることありますよね。
で、これまでは、毎回シェルスクリプトで uniq, sort とかしてたのですが、前後のカッコを省いたり、コンマや改行を変えたりと、イヤーな感じでした。特にアドレスが重複してたりすると面倒。
また、アドレスを逆順にドメイン毎に整理したい(並べたい)ことってありますよね?
で、今回Node-red の勉強がてら、メールアドレスをクレンジングする Webサービスを作ってみました。
Node-red のサイトにデプロイして "/MailClean" をアクセスすると,以下のフォームが出ます。
このテキストエリアに、適当なメールアドレスを入れます。CC に書いてあるようなのを直接ドカーンと入れるだけで動くはずです。
お試しあれ。個人的にはとっても便利!
(コードは非常に情けないので読まないデー。。。)
なおコードは、以下を Node-red にインポートしてもらえればOKです。
node
[{"id":"2216a8b6.dde958","type":"http in","name":"MailClean","url":"/MailClean","method":"get","swaggerDoc":"","x":197.51483154296875,"y":253.5407485961914,"z":"f183c3c.f0e7c4","wires":[["63ba28e2.9c45d8"]]},{"id":"ad9bb4a0.526448","type":"http response","name":"","x":587.5148315429688,"y":307.5407485961914,"z":"f183c3c.f0e7c4","wires":[]},{"id":"63ba28e2.9c45d8","type":"template","name":"Form Template","field":"payload","format":"html","template":"<HTML>\n <head>\n <title> Mail Address Cleaning</title>\n </head>\n <body>\n \n Mail Address Cleaning\n <form method=\"post\">\n \n <textarea cols=\"80\" rows=\"50\" name=\"addresses\" >\n please put mail addresses\n </textarea>\n <br>\n <input type=\"checkbox\" name=\"comma\" />\n コンマで分割する?\n <br>\n <input type=\"checkbox\" name=\"ret\" checked=\"checked\"/>\n 改行する?\n <br>\n <input type=\"checkbox\" name=\"rev\" />\n 反転する?\n <br>\n <input type=\"checkbox\" name=\"sort\" />\n ソートする?\n <br>\n <input type=\"checkbox\" name=\"uniq\" />\n uniqする?\n <br>\n <button> Doit! </button>\n </form>\n \n\n </body>\n \n \n \n</HTML>","x":397.51483154296875,"y":274.5407485961914,"z":"f183c3c.f0e7c4","wires":[["ad9bb4a0.526448"]]},{"id":"f2cd30c8.0d32d","type":"http in","name":"MailClean POST","url":"/MailClean","method":"post","swaggerDoc":"","x":188.51483154296875,"y":428.5407485961914,"z":"f183c3c.f0e7c4","wires":[["8ff2665c.700d98"]]},{"id":"8ff2665c.700d98","type":"function","name":"Check Mail","func":"var ads = msg.payload.addresses;\nvar com = msg.payload.comma; //コンマ\nvar ret = msg.payload.ret;// 改行\nvar rev = msg.payload.rev;// 反転\n\n//\"<\" \">\" で区切る\n\nvar splitter = /[<>\\r\\n\\t ]/;\n\nvar dds = ads.split(splitter);\n\n// ここかはフィルタ\n\nvar isMail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\nvar res = [];\n\nfor (var i = 0; i < dds.length; i++){\n var match=isMail.exec(dds[i]);\n if(match !== null){\n res.push(match[0]);\n }\n}\n\nif(msg.payload.sort ==\"on\"){// sort option!\n res.sort();\n //function(a,b){\n // if(a < b ) return -1;\n // if(b > a ) return 1;\n // return 0;\n //});\n}\n\n\nvar res2=[];\nif(msg.payload.uniq == \"on\"){ // uniq option!\n var last = \"\";\n for(var i = 0; i < res.length; i++){\n if(last != res[i]){\n res2.push(res[i]);\n }\n last = res[i];\n }\n res = res2;\n}\n\n\nvar out = \"\";\n\n\n\nfor( var i = 0; i < res.length; i++){\n if(rev==\"on\") {\n out = out+res[i].split(\"\").reverse().join(\"\");// 反転文字列を追加\n }else{\n out = out+res[i];\n }\n if(com==\"on\") out = out +\",\";\n if(ret==\"on\") out = out+\"\\n\";\n \n}\n\nmsg.payload = out;\n\nreturn msg;","outputs":1,"noerr":0,"x":322.51483154296875,"y":531.5406875610352,"z":"f183c3c.f0e7c4","wires":[["28841218.d77bee"]]},{"id":"28841218.d77bee","type":"template","name":"Result","field":"payload","format":"html","template":"<HTML>\n <BODY>\n <pre>\n{{payload}}\n </pre>\n </BODY>\n\n</HTML>","x":376.51483154296875,"y":703.5407333374023,"z":"f183c3c.f0e7c4","wires":[["a8522596.57add8"]]},{"id":"a8522596.57add8","type":"http response","name":"","x":631.5148315429688,"y":716.5406875610352,"z":"f183c3c.f0e7c4","wires":[]}]