ronron-gh / AI_StackChan2_FuncCall

OpenAIのFunction Callingを使って、robo8080さんのAIスタックチャン2に様々な機能を追加しました。
MIT License
23 stars 4 forks source link

E-Mailタイトル文字化け #1

Open odaki opened 1 year ago

odaki commented 1 year ago

こんにちは。 楽しくて便利な機能を実装されていて楽しみながら勉強させていただいています。

さきほど早速E-Mail機能を試しました。 結果、Subjectが文字化けして届きました。 EMailSenderの実装を見ましたら、Subjectはベタに指定文字列を書いているだけのようです。 https://github.com/xreef/EMailSender/blob/87a411fe75f9d60009cb3141bc47bf7fbf3f7930/EMailSender.cpp#L732

単純に渡す文字列をMIMEエンコーディング(コードはUTF-8)したら解決しましたので 取り込んでいただければ幸いです。

<変更前> https://github.com/ronron-gh/AI_StackChan2_FuncCall/blob/85cb520e32970c7f8d2a0ba10c460bc96fb7cc10/AI_StackChan2_FuncCall/src/FunctionCall.cpp#L483

<変更後> message.subject = "=?utf-8?B?7729776A772v7724776B772s776d44GL44KJ44Gu6YCa55+l?="; // "スタックチャンからの通知"

ronron-gh commented 1 year ago

使っていただけて嬉しいです。ご報告ありがとうございます。 早速取り込んでみましたが、送信処理の最中に例外が発生してしまいました(3回くらい試しました)。 送信先によって挙動が異なるのかもしれません。私の場合はGmailに送信しています。 半角カナを使用しなければ改善する可能性はあるでしょうか?苦肉の策として、"スタックチャン"を全角にして 試してみていただけないでしょうか。

odaki commented 1 year ago

ご確認ありがとうございます。

送信先もGMailにして試してみました。 私の場合、おおむね半角でも全角でも成功します。

スクリーンショット 2023-08-08 22 47 42

<全角化>

    message.subject = "=?utf-8?B?44K544K/44OD44Kv44OB44Oj44Oz44GL44KJ44Gu6YCa55+l?="; // "スタックチャンからの通知"

おおむね成功、と書いたのは、ファームを書き換えた直後の初回「メモメールして」で guru meditation error (だいたいNULL参照) で落ちていたからです。

ログをみてみると、OpenAIが依頼をメモ保存(save_note)と誤認識したのが理由みたいでした。

save_note
{}

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x4008bee7  PS      : 0x00060430  A0      : 0x80118f33  A1      : 0x3ffb1ee0  
A2      : 0x3ffc5068  A3      : 0x00000000  A4      : 0x00000001  A5      : 0x3ffb1e98  
A6      : 0x3ffea160  A7      : 0x3ffea16c  A8      : 0x00000000  A9      : 0x00000000  
A10     : 0x00000001  A11     : 0x3ffea1d4  A12     : 0x0000f000  A13     : 0x3f4b3320  
A14     : 0x00008000  A15     : 0x00008000  SAR     : 0x00000019  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x4008bf44  LEND    : 0x4008bf4f  LCOUNT  : 0x00000000  

Backtrace: 0x4008bee4:0x3ffb1ee0 0x40118f30:0x3ffb1f00 0x40119056:0x3ffb1f20 0x400d6746:0x3ffb1f40 0x400d728e:0x3ffb1fb0 0x400dc617:0x3ffb2080 0x400dd0f2:0x3ffb2130 0x400dd64b:0x3ffb21f0 0x400dd904:0x3ffb2240 0x4011bfe5:0x3ffb2290

  #0  0x4008bee4:0x3ffb1ee0 in memmove at /builds/idf/crosstool-NG/.build/HOST-x86_64-apple-darwin12/xtensa-esp32-elf/src/newlib/newlib/libc/string/memmove.c:66
  #1  0x40118f30:0x3ffb1f00 in String::move(String&) at /Users/odaki/.platformio/packages/framework-arduinoespressif32/cores/esp32/WString.cpp:237
  #2  0x40119056:0x3ffb1f20 in String::operator=(String&&) at /Users/odaki/.platformio/packages/framework-arduinoespressif32/cores/esp32/WString.cpp:277
  #3  0x400d6746:0x3ffb1f40 in save_note(char const*) at src/FunctionCall.cpp:335 (discriminator 1)
  #4  0x400d728e:0x3ffb1fb0 in exec_calledFunc(ArduinoJson::V6213PB2::BasicJsonDocument<ArduinoJson::V6213PB2::DefaultAllocator>, String*) at src/FunctionCall.cpp:614
  #5  0x400dc617:0x3ffb2080 in chatGpt(String, String*) at src/main.cpp:352
  #6  0x400dd0f2:0x3ffb2130 in exec_chatGPT(String) at src/main.cpp:436 (discriminator 1)
  #7  0x400dd64b:0x3ffb21f0 in SST_ChatGPT() at src/main.cpp:1332 (discriminator 1)
  #8  0x400dd904:0x3ffb2240 in loop() at src/main.cpp:1413
  #9  0x4011bfe5:0x3ffb2290 in loopTask(void*) at /Users/odaki/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:50

なかなか制御が難しいものだなぁ、と思いました。

おそらく関係ないとは思いますが、私は m5stack/M5Unified @ 0.1.8 meganetaaan/M5Stack-Avatar@^0.8.6 にして試しています。

何かご参考になれば。

ronron-gh commented 1 year ago

ご確認ありがとうございました。 送信先がGmailの場合もMIMEエンコーディングでうまくいくんですね。 私の場合はMIMEにすると例外発生したので。。。 こちらでももう少し試してみます。

ronron-gh commented 1 year ago

ちなみに、メモ経由でなくても、 「~をメールして」 で、直接メールを送信することもできます。

ronron-gh commented 1 year ago

m5stack/M5Unified @ 0.1.8 meganetaaan/M5Stack-Avatar@^0.8.6 にして試しています。

うーん、バージョン合わせてもだめですね。。。 ただ、CoreS3ならMIMEでうまくいきました(MIMEで落ちるのはCore2)。 とりあえず半角カナはあぶなそうなので、暫定処置として次のアップデートで全角にしておきます。 恒久対策はMIMEにしたいですが、Core2でうまくいってからにしたいと思います。