フォームが実際に表示されていない場合、どれも役に立たない多くのアイテムをクリーンアップしました。
以下は、認証を必要とし、ポート 25 で動作する SMTP サーバーを使用して、第 1 世代の Nexus 7 からメッセージを正常に送信しました。
実際に Google のサーバーのポート 465 に接続している場合は、このコードが対応していない暗号化を使用する必要があります。
IdMessage1.From.Text := 'blah blah'; の単純な割り当て 機能していなかったので、IdMessage1.From.Address と、他の IdMessage1 プロパティの同様のプロパティを置き換えました。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP, IdMessage,
FMX.StdCtrls, FMX.Edit;
type
Ttestform = class(TForm)
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
btnMessageSend: TButton;
edtUsername: TEdit;
edtPassword: TEdit;
Label1: TLabel;
Label2: TLabel;
edtFrom: TEdit;
Label3: TLabel;
edtTo: TEdit;
Label4: TLabel;
edtServer: TEdit;
Label5: TLabel;
edtPort: TEdit;
Label6: TLabel;
procedure btnMessageSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
testform: Ttestform;
implementation
{$R *.fmx}
procedure Ttestform.btnMessageSendClick(Sender: TObject);
var
intPort: Integer;
begin
ShowMessage('In button click');
IdSMTP1.Heloname:='test';
IdSMTP1.Host:=edtServer.Text;
IdSMTP1.Username:=edtUsername.Text;
intPort := 25;
ShowMessage('Before strtoint');
TryStrToInt(edtPort.Text, intPort);
ShowMessage('After strtoint');
IdSMTP1.Port:= intPort;
IdSMTP1.Password:=edtPassword.Text;
if IdSMTP1.Connected=True then IdSMTP1.Disconnect;
IdMessage1.Clear;
IdMessage1.From.Address := edtFrom.Text;
IdMessage1.Recipients.Add;
IdMessage1.Recipients.Items[0].Address := edtTo.Text;
IdMessage1.Priority := mpHigh;
IdMessage1.Sender.Address:=edtFrom.Text;
IdMessage1.Subject := 'Subject';
IdMessage1.Body.Add('test');
IdSMTP1.Connect;
IdSMTP1.Send(IdMessage1);
end;
end.