SVX日記
2024-08-09(Fri) Maveの力を借りて、今、必殺の、メール送信ッ!
世はAI流行りであるが、AIへの関わり方もイロイロで、スマホで語りかける関わり方もあれば、ゼロから学習させる関わり方もある。以前にやった画像認識は、既存のモデルを使っているからその中間か。で、いまは仕事で、客からの問い合わせに対する回答文の自動作成に取り組んでいる。半ば遊びでもあるのだが。
日本語で既存の生成AIに問い合わせる形なので、HTTP経由でAPIを叩いているだけであり、技術レベルとしては上記の画像認識よりも浅い。しかし「客からの問い合わせ(メール)に応答し」さらに「客からの『再』問い合わせ(メール)にも応答する」となると、メールのハンドリングだけで地味に大仕事である。キチンとメールを蓄積しておき、キチンとスレッド単位でメール本文を引き出せなくてはならない。軽く「メール本文」て言うけど、エンコード方式はひとつじゃないし、マルチパートだったりするしで、容易ではない。
そこに絶好なのが自作のメーラである「Mave」だ。メールの着信を検知したら、そのメッセージIDを元に、過去のメールをスレッドの頭から順に取り出すことができる。
mail0 = folder.get_mail_by_message_id(message_id)
mail0.folder.thread_sqs(mail0.sq).each {|sq|
mail = mail0.folder.get_mail(sq)
mailbody = ''; mail.body_each {|line|
mailbody << line
}
:
で、本題。まとめた経緯をAIに渡し、自動作成させた回答文をAIから受取り、どうする? 客に返す……のはちょっと早すぎる。当面は回答作成担当者へのサジェスチョンに使うのがせいぜいだ。が、どっちにしろ、回答文はメールで送ることになる。どうやって?
以前に書いたライブラリを使おうと思ったが、そこでふと思いついた。外からMaveのメール受信機能を拝借してメールをpopするmave_fetchコマンドがあるのだから、逆に、外からMaveのメール送信機能を拝借してメールをsmtpするmave_sendコマンドがあってもいいんじゃないかと。
そうすれば、改めて送受信アカウントなどを設定する必要もなくなるし、勝手に「送信済み(Sent)」フォルダにメールが残るし、勝手に「電子署名(S/MIME)」にも対応することになり、いいことづくめだ。
Encoding.default_external = 'UTF-8'
begin
mave = MaveController.new({:CONFIGS => @configs})
header = {}
header['Subject'] = 'テストメール'
header['From'] = '送信元 <from@example.com>'
header['To'] = '送信先 <to@example.com>'
header['X-Mave-Store-Folder'] = 'Outbox'
mave.generate_mail(header, [], ['テスト'])
mave.send_mail_smtp
mave.kill_mave
rescue
print($!.message + $/)
end
あとはこれを、生成AIとやりとりするコードの後に足すだけだ。はい、これにて、今回の盆栽の剪定作業は終了。いやぁ、盆栽って本当に楽しいもんですねぇ。ではまた。