Lazarus Lazarus Indy Smtp
にて、メール送信時の、Subject(題名)日本語対応
環境
Ubuntu 16
Lazarus 20.0.10
現象
メイル本文、送信者などの日本語対応ができたが
題名(Subject)が日本語にならない
IdMessage1のイベントで(IdMessage1InitializeISO)での
対応を行おうとIdMessage1InitializeISOを作成しようとするとにエラーとなり、作成できなかった
その他の対策(うまく行かなかった)
IdMessage(Indy)以外として
lNet,Synapse,jConvertなど行ったがうまくいかなかった(解決法があるかもしれないが。。。)
参考ページ
//https://wiki.freepascal.org/Networking_libraries
//https://www.migaro.co.jp/contents/support/technical_seminar_search/07th/Session3.pdf
対策
これでいいかわからないが、IdMessage1InitializeISO作成時のエラーをコメントアウトした
修正前(IdGlobal)
GOffsetFromUTC: TDateTime = 0{$IFDEF HAS_DEPRECATED}{$IFDEF USE_SEMICOLON_BEFORE_DEPRECATED};{$ENDIF} deprecated{$ENDIF};
{$IFDEF OSX}
GMachTimeBaseInfo: TTimebaseInfoData;
{$ENDIF}
修正後
GOffsetFromUTC: TDateTime = 0
// {$IFDEF HAS_DEPRECATED}{$IFDEF USE_SEMICOLON_BEFORE_DEPRECATED};{$ENDIF} deprecated{$ENDIF};
GMachTimeBaseInfo: TTimebaseInfoData;
{$IFDEF OSX}
GMachTimeBaseInfo: TTimebaseInfoData;
{$ENDIF}
修正前(TIdMessage)
IdCharSets,IdGlobalProtocols, IdMessageCoder, IdResourceStringsProtocols,
修正後
//IdCharSets,
IdGlobalProtocols, IdMessageCoder, IdResourceStringsProtocols,
本体
インスタンスはcreateせずに、設置したものを使用した
procedure TForm1.IdMessage1InitializeISO(var VHeaderEncoding: Char;
var VCharSet: string);
begin
VHeaderEncoding := 'B';
VCharSet := 'UTF-8';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
try
IdSMTP1.HOST:='xxx.com';
IdSMTP1.PORT:=587;
IdSMTP1.Username:='xxx@xxx.com';
IdSMTP1.Password:='xxxxxx';
IdSMTP1.Connect;
IdMessage1.ContentType := 'text/plain'; // コンテンツタイプ
IdMessage1.CharSet := 'UTF-8'; // 文字セット
IdMessage1.ContentTransferEncoding := 'BASE64';
IdMessage1.From.Address := 'info@atiinelab.com';
IdMessage1.Recipients.EMailAddresses := 'xxxxx@xxxx.com';
IdMessage1.ReplyTo.EMailAddresses:='xxx@xxx.com';
IdMessage1.Body.Text :='メール本文';
// IdMessage1.Subject := EncodeHeader(UTF8Encode('アカウントを送付します'), '', 'B', 'UTF-8');
IdMessage1.Subject := '日本語の題名';
IdMessage1.From.Name := EncodeHeader('送信者名', '', 'B', 'UTF-8');
//*=== メール送信 ===*/
IdSMTP1.Send(IdMessage1);
except
end;
finally
//*=== SMTPサーバの切断 ===*/
if IdSMTP1 <> nil then
begin
IdSMTP1.Disconnect;
end;
end;
end;