TIdSMTPを利用してメールを出してみる
今回は起動すると指定smtpサーバーを経由して、指定アドレスに指定サブジェクト、指定本文でのメールを送信するだけの単機能プログラムを作っておく。後で使うかも。VCLなプログラムではあるが、フォームも使わない、ユーザの操作も伴わない。という意味ではコンソールプログラムに近い。
まずいつものようなフォームにコンポーネントをドロップするやり方はしない。コンポーネントは動的に割り付けて使用する。今回使うのはTIdSMTPである。まず必要なヘッダをインクルードするが、何が必要なのかを見極める必要がある。そのためには、一旦コンポーネントパレットからIndyのTIdSMTPをフォームにドロップして、Unit1.hを検分します。増えたのは、
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdExplicitTLSClientServerBase.hpp>
#include <IdMessageClient.hpp>
#include <IdSMTP.hpp>
#include <IdSMTPBase.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
であるが、わかればもうフォームにドロップしたIdSMTP1(インスタンス)は削除してかまわない。他のコンポーネントをドロップしていないのであれば、ctrl-xでおけ。上記のヘッダー群が残っていることを確認する。Unit1.hは、
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdExplicitTLSClientServerBase.hpp>
#include <IdMessageClient.hpp>
#include <IdSMTP.hpp>
#include <IdSMTPBase.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE で管理されるコンポーネント
private: // ユーザー宣言
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endifUnit1.cppは、
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TIdSMTP* smtp;
TIdMessage* msg;
smtp = new TIdSMTP();
smtp->Host = "192.168.0.230"; //SMTPサーバ
msg = new TIdMessage();
msg->From->Name = "nao";
msg->From->Address = "nao@ghost.mydns.jp";
TIdEMailAddressItem* to = msg->Recipients->Add();
to->Name = "nao";
to->Address = "nao@ghost.mydns.jp";
msg->Subject = "notify";
msg->Body->Text = "nothing";
smtp->Connect();
smtp->Send(msg);
smtp->Disconnect();
Application->Terminate();
}
//---------------------------------------------------------------------------フォームを使わない、つまり表示しないので、Project1.cppを、
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TForm1), &Form1);
Application->ShowMainForm = false;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
赤字部分だけ追加します。これでフォームが表示されません。挙動はコンソールプログラムの如くです。


コメント