자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey XE10에서 Send mail 문제
2017.03.01 22:41
배우고 익히는데 많은 도움에 항상 감사를 드립니다.
개발 버젼 : XE10 seattle 에서 Android 플랫폼으로 TIdSMTP 컴포넌트로 메일을 보내는 프로그램을 짜봤는데 윈도우 플랫폼에서는 메일이 시원스럽게 잘 보내집니다.
다만 Android 플랫폼에서는 보내지를 못합니다.
어느부분이 문제인지 알수가 없어 문의를 드립니다.
참고로 해당 소스도 보내드립니다.
unit MailDemoU;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
FMX.MobilePreview,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP,IdSSLOpenSSL,
IdMessage,IdText,IdAttachment, FMX.Edit, FMX.Controls.Presentation;
type
THeaderFooterForm = class(TForm)
Header: TToolBar;
Footer: TToolBar;
HeaderLabel: TLabel;
Button1: TButton;
edtEmailAddr: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
function SendMail(idFrom, pw, idTo, aSubject, aText: string): Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
HeaderFooterForm: THeaderFooterForm;
gEmailFlag,
gSecritCode : String;
implementation
{$R *.fmx}
function THeaderFooterForm.SendMail(idFrom, pw, idTo, aSubject, aText: string): Boolean;
var
SMTP: TIdSMTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
MM: TIdMessage;
begin
result := false;
SMTP := TIdSMTP.Create(nil);
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
MM := TIdMessage.Create(nil);
try
SMTP.Host := 'smtp.gmail.com';
SMTP.Port := 587; // 465 또는 587
SMTP.Username := idFrom;
SMTP.Password := pw;
SMTP.IOHandler := SSL;
SMTP.UseTLS := utUseExplicitTLS;
SSL.Host := SMTP.Host;
SSL.Port := SMTP.Port;
MM.From.Address := idFrom;
MM.Recipients.EMailAddresses := idTo;
MM.ContentTransferEncoding := 'base64';
MM.Subject := aSubject;
with TIdText.Create(MM.MessageParts, MM.Body) do
begin
CharSet := 'utf-8';
Body.Text := aText;
end;
// send mail
try
try
SMTP.Connect;
SMTP.Send(MM);
result := true;
except
on E: Exception do
showmessage('ERROR: ' + E.Message);
end;
finally
if SMTP.Connected then
SMTP.Disconnect;
end;
finally
SMTP.Free;
SSL.Free;
MM.Free;
end;
end;
procedure THeaderFooterForm.Button1Click(Sender: TObject);
Var
idFrom ,
pw ,
idTo ,
aSubject ,
aText ,
sEmailAddr : String;
begin
gSecritCode:= '';
gEmailFlag := 'N';
sEmailAddr := edtEmailAddr.Text;
With THeaderFooterForm do
Begin
End;
idFrom := 'aaaaaaaa@gmail.com'; // From Mail
pw := '1234567890';
idTo := sEmailAddr;
aSubject := 'Mail Test';
aText := 'Send Texting';
if SendMail(idFrom, pw, idTo, aSubject, aText) <> TRUE Then
Begin
ShowMessage('Check Mail addr. !!');
End
Else
Begin
ShowMessage('Completed of Send Mail. !!');
End
end;
end.
Firemonkey XE10에서 Send mail 문제
2017.03.01 22:41
배우고 익히는데 많은 도움에 항상 감사를 드립니다.
개발 버젼 : XE10 seattle 에서 Android 플랫폼으로 TIdSMTP 컴포넌트로 메일을 보내는 프로그램을 짜봤는데 윈도우 플랫폼에서는 메일이 시원스럽게 잘 보내집니다.
다만 Android 플랫폼에서는 보내지를 못합니다.
어느부분이 문제인지 알수가 없어 문의를 드립니다.
참고로 해당 소스도 보내드립니다.
unit MailDemoU;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
FMX.MobilePreview,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP,IdSSLOpenSSL,
IdMessage,IdText,IdAttachment, FMX.Edit, FMX.Controls.Presentation;
type
THeaderFooterForm = class(TForm)
Header: TToolBar;
Footer: TToolBar;
HeaderLabel: TLabel;
Button1: TButton;
edtEmailAddr: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
function SendMail(idFrom, pw, idTo, aSubject, aText: string): Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
HeaderFooterForm: THeaderFooterForm;
gEmailFlag,
gSecritCode : String;
implementation
{$R *.fmx}
function THeaderFooterForm.SendMail(idFrom, pw, idTo, aSubject, aText: string): Boolean;
var
SMTP: TIdSMTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
MM: TIdMessage;
begin
result := false;
SMTP := TIdSMTP.Create(nil);
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
MM := TIdMessage.Create(nil);
try
SMTP.Host := 'smtp.gmail.com';
SMTP.Port := 587; // 465 또는 587
SMTP.Username := idFrom;
SMTP.Password := pw;
SMTP.IOHandler := SSL;
SMTP.UseTLS := utUseExplicitTLS;
SSL.Host := SMTP.Host;
SSL.Port := SMTP.Port;
MM.From.Address := idFrom;
MM.Recipients.EMailAddresses := idTo;
MM.ContentTransferEncoding := 'base64';
MM.Subject := aSubject;
with TIdText.Create(MM.MessageParts, MM.Body) do
begin
CharSet := 'utf-8';
Body.Text := aText;
end;
// send mail
try
try
SMTP.Connect;
SMTP.Send(MM);
result := true;
except
on E: Exception do
showmessage('ERROR: ' + E.Message);
end;
finally
if SMTP.Connected then
SMTP.Disconnect;
end;
finally
SMTP.Free;
SSL.Free;
MM.Free;
end;
end;
procedure THeaderFooterForm.Button1Click(Sender: TObject);
Var
idFrom ,
pw ,
idTo ,
aSubject ,
aText ,
sEmailAddr : String;
begin
gSecritCode:= '';
gEmailFlag := 'N';
sEmailAddr := edtEmailAddr.Text;
With THeaderFooterForm do
Begin
End;
idFrom := 'aaaaaaaa@gmail.com'; // From Mail
pw := '1234567890';
idTo := sEmailAddr;
aSubject := 'Mail Test';
aText := 'Send Texting';
if SendMail(idFrom, pw, idTo, aSubject, aText) <> TRUE Then
Begin
ShowMessage('Check Mail addr. !!');
End
Else
Begin
ShowMessage('Completed of Send Mail. !!');
End
end;
end.
메일 발송시 발생하는 오류 메세지를 적어보내주시던지 스크린샷으로 넣어 주시면 오류를 찾는데 도움이 될것같습니다.