2015/10/29

Delphi/Indy10 TMessage の長い Subject で文字化け(文字切れ)

Delphi Indy10 TMessage の Subject へ長い文字列を投入して、TIdSMTP 等で送信すると受信環境により、文字が途中までしか表示されない
これは、TMessage の Subjectヘッダが 75文字(エンコード後)を超えると改行されるという仕様によるもの(受信環境が Outlook や Gmail, Yahoo Mail 等は、この改行を連結してくれる)

ならば
Msg.Subject := MyBase64(ASubject);

みたいに独自のエンコードで、Base64した ASCIIを投入してやればいいのかというと、それもNG。というのも、投入したエンコード後の値が75文字を超えると、更にBase64でエンコードして、改行してくれるというお節介ぶり

では、最終的な実態である
IdMsg.LastGeneratedHeaders.Values['Subject']

プロパティへ直接投入すればよいと思ったが、Subjectプロパティからこの値が生成されるタイミング(GenerateHeaderメソッド)は、TIdSMTP では、メール送信時なので入れなおすスキが無い

最終的に Indyのソースをいじるわけですが
インストール時のソースを変更しても変化しませんし、パッケージをコンパイルしなおす場合、変更による他アプリケーションへの影響も気になります

という事でピンポイントで変更するため、Indyのソースから該当のファイルを取り出して、プロジェクトのディレクトリへコピーします

具体的には(今回の場合) Indyのソースディレクトリ
C:\Program Files (x86)\Embarcadero\Studio\[バージョン]\source\Indy10\Protocols
から
IdCoderHeader.pas
IdCompilerDefines.inc
をプロジェクトディレクトリへコピーして、都合の良いソースに書き換えます

MaxEncLen を大きな数字にするか、該当の箇所をコメントアウトします
  procedure EncodeWord(AP: Integer);
  const
    MaxEncLen = 2048;// 75;
  var
    LQ: Integer;
    EncLen: Integer;
    Enc1: string;
  begin //...
これでコンパイルを行うと、プロジェクトディレクトの IdCoderHeader.pas が優先して読み込まれて、今回のみ変更が反映されるという具合です

2015/10/23

Amazon定期便・値引きの仕組み

今更ながら Amazon定期便が値引きされる仕組み

1割程度の値引きがあり、設定した月間隔で、同じ商品を届ける Amazon定期便

  • 予告なく発送は行われない
  • 商品が収束の場合、代替を提案される
  • 2回目以降は、契約者ごとの配送日(毎月○日など)あたりに発送される
  • 同月に定期便の商品が複数あると、同梱される
  • 定期便発送と近い時期に Amazonで注文をすると同梱される

値引きの仕組みは、上記項目後半の同梱により送料を抑えられることが大きいのだろう
もともと Amazonでは商品を複数注文(定期便以外)した場合、自動割引が適用されることがある

上記の方式を逆手に取って、定期便の発送を早める(毎月発送日を変更せず)には、発送予定日より前に別の商品を注文することで、早い方に合わせて同梱発送できる場合がある

2015/10/21

Windows 10 Home の 32bit + 64bit 共用 ISO サイズは 6GB

Windows 10 Home の 32bit + 64bit 共用 ISO サイズは 6GB程度あり、4.7GB のDVD-R には焼けません
32bit または 64bit 用であれば、それぞれ 4.7GB未満に収まります


2015/10/19

NVR500 RT58i RT57i のACアダプター

ヤマハのルータ RT58i のアダプタがそろそろ壊れ始める時期になってきました

RT58i が突然の機能停止で、NVR500を代替に持って行ったら、ACアダプタの故障で NVR500用のACアダプタで代用して完了とかいうワケです

付属ACアダプタの各仕様
NVR500: 12V 2A
RT58i: 12V 0.95A
RT57i: 9V 1.1A

RT58i のACアダプタは NVR500 のものが流用でき、現在(2015年10月時点)販売中
RT57i のACアダプタ
電圧: 9V
電流: 1.1A ←以上のアダプタが必要
コネクタ: 外径4.8mm 内径1.7mm

と、ズバリを見つけにくい仕様です。ACアダプタ付属の中古品等を用意しておくとよいかもしれません

2015/10/14

Mac OS-X でゴミ箱を経由せずにファイルを直接削除

Mac OS-X でゴミ箱を経由せずにファイルを直接削除

alt + command + delete