Indy9でメールを送信するには、IndyのTIdSMTPを使います。
C++Builder 2007を使用する場合は、「C++Builder2007とIndy10でメールを受信する」をご覧下さい。
C++Builder 2009を使用する場合は、「C++Builder2009とIndy10でメール送信」をご覧下さい。
C++Builder 2020以降を使用する場合は、「C++Builder2010とIndy10でメールを送信する」をご覧下さい。
文字コードをShift_JISからJISに変換するのには、IndyのEncode2022JP()を使いました。
Subjectは自動的にBase64でエンコードしてくれるようです。
AnsiString host = "mail.example.jp";
AnsiString subject = Encode2022JP("メールの件名");
AnsiString to = yamamoto@example.jp";
AnsiString from = yamamoto@example.jp;
AnsiString text = Encode2022JP("メールの本文");
IdSMTP1->QuickSend(__classid(TIdSMTP), host, subject, to, from, text);
ファイルを添付したり、細かいことをしたいときは、TIdMessageを使用します。
TIdSMTP* smtp = new TIdSMTP(this);
TIdMessage* mail = new TIdMessage(this);
try
{
//件名(Subject)
mail->Subject = Encode2022JP("メールの件名");
//差出人(From)
mail->From->Name = Encode2022JP("山本");
mail->From->Address = "yamamoto@example.jp";
//宛先(To)
TIdEMailAddressItem* item = mail->Recipients->Add();
item->Name = "山本";
item->Address = "yamamoto@example.jp";
//メールの本文(Body)
mail->Body->Text = Encode2022JP("メールの本文。");
//添付ファイル
AnsiString filename = "C:\サンプル.txt";
TIdAttachment* attach = new TIdAttachment(mail->MessageParts, filename);
attach->ContentTransfer = "base64";
//添付ファイルのファイル名に日本語を含むときはBase64にエンコードする必要がある
attach->FileName = EncodeHeader(Encode2022JP(ExtractFileName(filename)),
TSysCharSet(), 'B', iso2022jp, "ISO-2022-JP");
//ファイルにあわせて text/plain image/gif image/jpeg application/octet-stream など
attach->ContentType = "text/plain";
//重要度「高」
mail->Priority = mpHigh;
mail->ContentType = "text/plain";
mail->CharSet = "ISO-2022-JP";
//SMTPサーバー
smtp->Host = "mail.example.jp";
//PORT(必要に応じて設定)
smtp->Port = 25;
//サーバーに接続して送信
smtp->Connect();
smtp->Send(mail);
smtp->Disconnect();
}
__finally
{
delete smtp;
delete mail;
}