弊社の電子メールの現状について
現状、弊社で業務に使用しているアカウントだけでも1日で200通以上の迷惑メールが届いております。
それらはメールサーバーのフィルターで自動分別しています。おそらく大丈夫だと期待していますが、本当に不正でないメールが誤ってフィルタリングされていないかどうかは量が量だけに確認することができません。
これを書いている間にも次々と届いた迷惑メールがフィルタリングされている状況です。
また、弊社から登録情報をお客様宛に送信しても、これが本当に届いているのかどうか全くわかりません。
Gmailが届かない、Yahooメールが届かないなどトラブルは日常茶飯事で、現状は電子メールが正しく届くことを期待できない状況だと思われます。
Fediverseへの自動送信処理を書きたい
電子メールでsendmailするかのようにFediverseにサーバー処理から自動送信する処理を考えていた
漠然と考えた末 #fedibird の弊アカウントから発信するのがもっとも簡単そうと判断
詳細不明ながら開発メニューにある新規アプリで何か作成し得られたトークンを利用してエンドポイント /api/v1/statuses 宛に何かをしたらいいらしい。ただトークンをプログラムで持たねばならないので明らかにセキュアではない
あと仕様書
https://docs.joinmastodon.org/methods/statuses/#create
が不親切すぎてパラメーターの与え方が全く分からない。メンションの@某は本文に書くだけでいいのかも分からないし、visibilityにdirectを指定すればよいらしいもののどこに書いたらいいのか使用例がない
たまたま見つけたここ
https://qiita.com/KEINOS/items/27d201afed4ed665cb11
だと、先のエンドポイントにPOSTで、本文に
visibility=direct
status=本文
とすれば良いらしい
ヘッダーは
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer トークン
とするらしい
C++からhttpsにpostする必要がある(長いので伏せ)
弊社サービスのバックエンド処理は、「弊社なので(※1)」信頼と実績の C++ with STL で書かれております(※2)。
※1 意味不明
※2 C++ with STLは良いものです。MFCはNo thank youですが
ということで #fedibird のAPIを操作するためにはC++からhttpsのpost処理を書く必要があるわけですが、httpの時代には1回くらいは書いたことがあるような記憶がほんのりとありますがhttpsではまだ書いたことがありません。
httpsの場合、おそらくtcpで接続したあとtlsの接続をする処理が必要になると思うので、かなり大変なはず。
FreeBSDなのでLibreSSLではなくOpenSSLが入っているので、これを使うような感じだったと仄かな記憶はあります。
まあ最悪、sysmte()関数を使って
system("curl -X POST ....");
みたいな方法もないことはないですが…
動けば何でもいいとは思うものの、なんか負けたような気がする。
電子メールの代わりにFediverseアカウントを使う場合のさらなる模索(長いので伏せ)
単純に自身のアカウントをコピペないし手入力だと書き間違えた時の情報漏洩リスクが高い
正しくても、頭に @ を書かない人とか、https〜など自身のURLを書く人もいそうだ
そこで丼やMisskey用アプリのように、契約マネージャーアプリにアカウントに対して関連付けを実行しアカウントが正当かを確認する必要がある
アカウントが正しいか確認できれば良いので権限は0でも良いが、ここ
https://gist.github.com/okapies/eab5c6fc217e914ed0cac6c944384e4d
によると
OAuth2クライアント登録を実行するとアクセストークンが得られ、そのトークンで色々なAPIを叩けるらしい。
MisskeyはAPI仕様が特殊ながら、あちらも恐らくは同様だろう
アカウントが正しいか判断できれば充分でAPIを叩く必要は全くないので、ここはトークンが得られた事実をもってOKとみなして良いのだろうか。今はまだ分からないが恐らくWebの画面ではこのアプリを承認してよいかという認証画面があり、OKしないとアクセストークンは払い出されないはず。
こうして登録されたアプリは、#fedibird の場合は
https://fedibird.com/oauth/authorized_applications
に表示されるらしい
@miraicorp DevToolsでcurl版のリクエストを取得するとわかりやすいかな。
curl 'https://fedibird.com/api/v1/statuses' -H 'authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXX' -H 'content-type: application/json' --data-raw '{"status":"@noellabo@misskey.noellabo.jp 本文","in_reply_to_id":null,"media_ids":[],"sensitive":false,"spoiler_text":"警告文","visibility":"direct","circle_id":null,"poll":{"options":["項目1","項目2"],"expires_in":86400,"multiple":false},"quote_id":null,"scheduled_at":null,"scheduled_in":86400,"expires_at":null,"expires_in":1800,"expires_action":"mark","status_reference_ids":[],"searchability":"direct"}'
@miraicorp 余分な部分を消しましたが、消しすぎて-X POSTが抜けてますね。
メンションやハッシュタグは本文のテキストを解析しますので、statusに含めればOKです。
画像を添付する時は、あらかじめ画像だけ先にAPIで登録して、そのIDをmedia_idsに記載します。
@noellabo ありがとうございます。
MastodonのAPIの引数はContent-Typeが 'application/x-www-form-urlencoded' と 'application/json' の二通りに対応しているということで良いのでしょうか
@miraicorp railsが変換してくれるのでどちらでもいけますが、WebUIでは、ファイルアップロードだけ前者、他は後者です。
#ICカードこれひとつ
会員登録で電子メールを廃止する案について
将来的には契約マネージャーを定期的に弊社サーバーにアクセスするようにして契約情報を受信できるようにすることで、メールを使用しないでなんとかするPlayストアアプリのような仕組みにしたいと考えていますが、セキュリティを維持してこれを実現するのは弊社だけでは難しい状況です。
ですので他の方法を模索する必要があります。
つきましては、お客様の同意が得られればトラブルの多い電子メールでの契約については廃止として、Fediverseアカウントでユーザー登録を実施し、そのFediverseアカウント宛にDMで登録内容のお知らせを実施する方法を検討しています。
会員数60万を突破したMisskey.ioや、会員数2億人弱いるらしいThreadsの普及、もはやいくつあるのか数えるのも不可能な数のMastodonやMisskeyほかのFediverseサーバーが立ち並ぶ状況ですので、Fediverseについては一定の支持が得られたものと判断しています。
メールアドレス一つあれば始められるものなので、一つのクッションとして使うには有効かと考えているところです。
この案に対するご意見をリプライでお寄せいただければ幸いです。