GMailのSMTPサーバー経由でメールを送信する ~Delphiソースコード集
GMailの設定を行う
外部のメーラーを使えるようにGMailの設定を行います1-(1)ギアマークをクリックし、設定をクリックします。
1-(2)メール転送とPOP/IMAPをクリックします。
●すべてのメールでPOPを有効にする を選択します
●IMAPを有効にする を選択します。
変更を保存する をクリックします。
1-(3)Googleアカウントをクリックします。
1-(4)アカウントにアクセスできるアプリをクリックします。
1-(5)安全性の低いアプリの許可を有効にします。
2.Delphiを起動してプロジェクトを作成する
2-(1)Delphiを起動し、新規作成⇒VCL フォーム アプリケーションをクリックします。
2-(2)ツールパレットからBUTTONを1つ、フォームへドラッグします
3.OpenSSL系のDLLファイルをダウンロードして展開しパスの通った場所に設定する
https://indy.fulgan.com/SSL/からOpenSSLをダウンロードし、解凍します。
libeay32.dll
ssleay32.dll
ファイルをパスの通った場所(c:\windowsフォルダや、これから作成する実行ファイルと同じ位置等)に配置します。
4.プログラムを記述する
ドラッグドロップしたBUTTONをダブルクリックします。以下の赤字部分のソースコードを記述してください。(4行の追加のみ)
unit Unit1; interface uses System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } procedure msgOnInitializeISO(var VHeaderEncoding:Char;var VCharSet:String); public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} uses IdMessage,IdSSLOpenSSL,IdSMTP,IdExplicitTLSClientServerBase ,IdEMailAddress; procedure TForm1.msgOnInitializeISO(var VHeaderEncoding: Char; var VCharSet: String); begin VHeaderEncoding:='B'; VCharSet:='UTF-8'; end; procedure TForm1.Button1Click(Sender: TObject); var smtp:TIdSMTP; ssl:TIdSSLIOHandlerSocketOpenSSL; msg:TIdMessage; begin smtp:=TIdSMTP.Create(); try smtp.Host:='smtp.gmail.com'; smtp.Port:=465; smtp.Username:='gmailのユーザー名、通常はgmailのメールアドレス'; smtp.Password:='gmailのパスワード'; ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(); try ssl.Host:=smtp.Host; ssl.Port:=smtp.Port; ssl.Destination:=ssl.Host+':'+IntToStr(ssl.Port); smtp.IOHandler:=ssl; //utUseImplicitTLSはSSL/TLS通信指定、 //utUseExplicitTLSはStartTLS(途中からSSL/TLSに切替える通信で通常はポート587を使う)指定で // smtp.UseEhlo=True;も指定する(サーバーがStartTLSをサポートしているかTIdSMTPが検出) smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS; smtp.Connect;//接続 msg:=TIdMessage.Create(); try msg.ContentType:='text/plain'; msg.CharSet:='UTF-8'; msg.ContentTransferEncoding:='BASE64'; msg.From.Address:='hoge@hoge.hoge';//メールの送り元。通常はgmailのアドレス msg.Recipients.Add.Address:='hoge_to1@hoge.hoge' ;//送り先1人目 msg.Recipients.Add.Address:='hoge_to2@hoge.hoge' ;//送り先2人目。不要な場合はこの行を削除 msg.CCList.Add.Address :='hote_cc1@hoge.hoge' ;//Ccの送り先。不要な場合はこの行を削除 msg.BccList.Add.Address :='hoge_bcc1@hoge.hoge';//Bccの送り先。不要な場合はこの行を削除 msg.Subject:='メールの件名を記述'; msg.Body.Add('メール本文1行目'); msg.Body.Add('メール本文の2行目'); msg.OnInitializeISO:=msgOnInitializeISO; smtp.Send(msg);//メールの送信 finally msg.Free; end; smtp.Disconnect(); finally ssl.Free; end; finally smtp.Free; end; end; end.
4.実行する
実行ボタンを押すとコンパイルされ実行します。(デバッグ実行でもOKです。)実行されたら、button1を押すとメールが送られます。
5.その他
HTML形式メールの場合は以下のようにするprocedure TForm1.Button1Click(Sender: TObject); var smtp:TIdSMTP; ssl:TIdSSLIOHandlerSocketOpenSSL; msg:TIdMessage; begin smtp:=TIdSMTP.Create(); try smtp.Host:='smtp.gmail.com'; smtp.Port:=465; smtp.Username:='gmailのユーザー名、通常はgmailのメールアドレス'; smtp.Password:='gmailのパスワード'; ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(); try ssl.Host:=smtp.Host; ssl.Port:=smtp.Port; ssl.Destination:=ssl.Host+':'+IntToStr(ssl.Port); smtp.IOHandler:=ssl; smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS; smtp.Connect;//接続 msg:=TIdMessage.Create(); try msg.ContentType:='text/html'; msg.CharSet:='UTF-8'; msg.ContentTransferEncoding:='BASE64'; msg.From.Address:='hoge@hoge.hoge';//メールの送り元。通常はgmailのアドレス msg.Recipients.Add.Address:='hoge_to1@hoge.hoge' ;//送り先 msg.Subject:='メールの件名を記述'; msg.Body.Add('<span style="color:red;">メール本文1行目</span>'); msg.Body.Add('<p>メール本文の2行目</p>'); msg.OnInitializeISO:=msgOnInitializeISO; smtp.Send(msg);//メールの送信 finally msg.Free; end; smtp.Disconnect(); finally ssl.Free; end; finally smtp.Free; end; end;
HTML形式メールで添付画像つきで、それを表示する本文を送る場合はは以下のようにする
uses
IdMessage,IdSSLOpenSSL,IdSMTP,IdExplicitTLSClientServerBase
,IdEMailAddress,IdText,IdAttachmentFile;
procedure TForm1.Button1Click(Sender: TObject);
var smtp:TIdSMTP;
ssl:TIdSSLIOHandlerSocketOpenSSL;
msg:TIdMessage;
begin
smtp:=TIdSMTP.Create();
try
smtp.Host:='smtp.gmail.com';
smtp.Port:=465;
smtp.Username:='gmailのユーザー名、通常はgmailのメールアドレス';
smtp.Password:='gmailのパスワード';
ssl:=TIdSSLIOHandlerSocketOpenSSL.Create();
try
ssl.Host:=smtp.Host;
ssl.Port:=smtp.Port;
ssl.Destination:=ssl.Host+':'+IntToStr(ssl.Port);
smtp.IOHandler:=ssl;
smtp.UseTLS:=TIdUseTLS.utUseImplicitTLS;
smtp.Connect;//接続
msg:=TIdMessage.Create();
try
msg.ContentType:='multipart/related: type="text/html"';
msg.CharSet:='UTF-8';
msg.ContentTransferEncoding:='BASE64';
msg.From.Address:='hoge@hoge.hoge';//メールの送り元。通常はgmailのアドレス
msg.Recipients.Add.Address:='hoge_to1@hoge.hoge' ;//送り先
msg.Subject:='メールの件名を記述';
//メール本文
with TIdtext.Create(Msg.MessageParts) do
begin
ContentType:='text/html';
CharSet:='UTF-8';
Body.Add('<br><h3>HTMLメール本文開始</h3>');
Body.Add('<img src="cid:image1">'); //ここで添付ファイルのContentIDを指定する
end;
//添付ファイルを追加
with TIdAttachmentFile.Create(
Msg.MessageParts,'image1.jpg') do
begin
FileName:='image1.jpg';
ContentTransfer:='BASE64';
ContentType:='image/jpeg';
ContentDisposition:='inline';
ContentID:='image1';
end;
msg.OnInitializeISO:=msgOnInitializeISO;
smtp.Send(msg);//メールの送信
finally
msg.Free;
end;
smtp.Disconnect();
finally
ssl.Free;
end;
finally
smtp.Free;
end;
end;