//---------------------------------------------------------------------------
#include <vcl.h>
#include "nMail.h"
#pragma hdrstop

#include "qfssmtp.h"
#include "qfssend1.h"
#include "jconvert.hpp"
#pragma package(smart_init)
#define HEADER_MAX 8192
#define BUF_SIZE 1024
AnsiString logstr;
#define AddLog(s) logstr=s;Synchronize(AddLog1)
//---------------------------------------------------------------------------

// 注意：異なるスレッドが所有する VCL のメソッド/関数/プロパティを
//       別のスレッドの中から扱う場合，排他処理の問題が発生します。
//
//       メインスレッドの所有するオブジェクトに対しては Synchronize
//       メソッドを使う事ができます。他のオブジェクトを参照するため
//       のメソッドをスレッドクラスに追加し，Synchronize メソッドの
//       引数として渡します。
//
//       たとえば UpdateCaption を以下のように定義し、
//
//      void __fastcall ThSmtp::UpdateCaption()
//      {
//        Form1->Caption = "スレッドから書き換えました";
//      }
//
//       Execute メソッドの中で Synchronize メソッドに渡すことでメイ
//       ンスレッドが所有する Form1 の Caption プロパティを安全に変
//       更できます。
//
//      Synchronize(UpdateCaption);
//
//---------------------------------------------------------------------------

__fastcall ThSmtp::ThSmtp(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}

AnsiString CreateHeaderStringSub(AnsiString st){
 int i;
 for(i=1;i<st.Length();i++){
  if(st[i]=='('){st.Delete(i,1);st.Insert("（",i);++i;}
  if(st[i]==')'){st.Delete(i,1);st.Insert("）",i);++i;}
  }
 return CreateHeaderString(st);
}

//--- File-送信 Send Mail
AnsiString GenFrom(AnsiString st){
 int a;// AnsiString st2;
 if((a=AnsiPos(" <",st))<2)return st;//1234 <56> a=5 5  9-6+2
// st2=EncodeBase64(ConvertJCode(st.SubString(1,a-2),JIS_OUT));
 return "=?ISO-2022-JP?B?"+EncodeBase64(ConvertJCode(st.SubString(1,a-1),JIS_OUT))+"?="+st.SubString(a,st.Length()-a+1);
}
//---------------------------------------------------------------------------
void __fastcall ThSmtp::Execute()
{
        // TODO : スレッドとして実行したいコードを以下に記述 */
 int i;AnsiString body="",header="",st/*,subject*/;bool isBody=false;
 for(i=0;i<FrmSend->li_ini->Count;i++){
  st=FrmSend->li_ini->Strings[i];
  if(st=="body"){isBody=true;}
  else{if(isBody){body=body+st+"\n";}}}

 header="X-Mailer: qfssend 1.0";
 if(INI("Reply-To")!=""){header=header+"\r\nReply-To: "+CreateHeaderStringSub(INI("Reply-To"));}

// subject=INI("subject");subject=CreateHeaderStringSub(subject);
// header=header+="\r\nSubject: "+subject;

// Application->MessageBox(CreateHeaderStringSub(INI("subject")).c_str(),"sub",MB_OK);
/* Memo1->Lines->Add("HOST="+INI("smtphost")+"\n"
 +"TO="+INI("mailto")+"\n"
 +"CC="+INI("cc")+"\n"
 +"BCC="+INI("bcc")+"\n"
 +"FROM="+INI("from")+"\n"
 +"SUBJECT="+INI("subject")+"\n"
 +"ATTACHE="+INI("attachement")+"\n"
 +"BODY="+body+"\n"
 +"HEAD="+header);*/
// AddLog("Connect "+INI("smtphost"));
 if(NMailSmtpSendMailPortNo(INI("smtphost").c_str(),
  CreateHeaderStringSub(INI("mailto")).c_str(),
  CreateHeaderStringSub(INI("cc")).c_str(),
  CreateHeaderStringSub(INI("bcc")).c_str(),
  CreateHeaderStringSub(INI("from")).c_str(),
  CreateHeaderStringSub(INI("subject")).c_str(),
  body.c_str(),
  header.c_str(),
  INI("attachement").c_str(),0,StrToInt(INI("smtpport")))!=1){
  AddLog("失敗");}
 else{AddLog("OK");FrmSend->Timer1->Enabled=true;}
}
//---------------------------------------------------------------------------
void __fastcall ThSmtp::AddLog1(void){
 FrmSend->Memo1->Lines->Add(logstr);}


