3

Indy コンポーネントを使用して Delphi XE5 (android)からメールを送信しようとしています:

フォームにはTIdSMTPと がありTIDMessageます。

フォームの作成時:

testform:=Ttestform.create(self);
testform.show;

アプリケーションが停止し、何が問題なのかわかりません... Indy コンポーネントは Android と互換性がないと思います...

  IdSMTP1.Heloname:='test';
  IdSMTP1.Host:='smtp.gmail.com';
  IdSMTP1.Username:='umail@gmail.com';
  IdSMTP1.Port:=465;
  IdSMTP1.Password:='pass';

  if IdSMTP1.Connected=True then IdSMTP1.Disconnect;

  IdMessage1.clear;
  IdMessage1.From.Text :='Testing';
  IdMessage1.BccList.EMailAddresses :='umail@gmail.com';
  IdMessage1.Priority := mpHigh;
  IdMessage1.Sender.Text:='Umail';
  IdMessage1.Subject := 'Subject';
  IdMessage1.Body.Add('test');
  IdSMTP1.Connect;
  Try
    IdSMTP1.Send(IdMessage1);
  except
  End;

これ使ってる人いる?!

Form Dont SHOW アプリケーションは停止しています...ここで完全なソースを参照してくださいhttp://pastebin.com/iGtJrHHs

4

5 に答える 5

1

user1147833;

サーバーに接続した後、認証操作を行う必要があります。

コードに切り替えてください。

IdSMTP1.Connect;
IdSMTP1.Authenticate;
  Try
    IdSMTP1.Send(IdMessage1);
  except
  End;
于 2013-10-02T13:16:49.167 に答える
1

フォームが実際に表示されていない場合、どれも役に立たない多くのアイテムをクリーンアップしました。
以下は、認証を必要とし、ポート 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.
于 2013-10-02T15:59:21.863 に答える
0

Android デバイスにデプロイする前に、Win32 プラットフォームで実行して OK かどうかを確認します。OpenSSL DLL (libeay32.dll と ssleay32.dll) を同じディレクトリに配置することを忘れないでください。ただし、Android では問題ありません。これが私のコードです。

procedure TForm1.Button1Click(Sender: TObject);
begin
with IdMessage1 do
begin
  Recipients.EMailAddresses := 'test@gmail.com';
  From.Address              := 'test@gmail.com';
  From.Name                 := 'Self';
  CCList.EMailAddresses     := '';
  BccList.EMailAddresses    := '';
  Priority                  := mpNormal;
  Subject                   := 'Test Mail Subject';
  Body.Add('Test Mail Body');
end;

with IdSMTP1 do
begin
  Host      := 'smtp.gmail.com';
  Username  := 'xxxxxxx';
  Password  := 'yyyyyyy';
  IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
  Port      := 465;
  UseTLS    := utUseImplicitTLS;

  try
  Connect;
  except
  end;

  if not Connected then
  begin
    Showmessage('Error');
    Exit;
  end;

  try
  Send(IdMessage1);
  finally
  Disconnect;
  end;

 end;
end;
于 2014-06-16T20:18:29.873 に答える