{----------------------------------------------------------------------------- Unit Name: UCMail Author: QmD Date: 09-nov-2004 Purpose: Send Mail messages (forget password, user add/change/password force/etc) History: included indy 10 support -----------------------------------------------------------------------------} unit UCMail; interface {.$I 'UserControl.inc'} uses Classes, Dialogs, UCALSMTPClient, SysUtils, UcConsts_Language; type TUCMailMessage = class(TPersistent) private FAtivo: Boolean; FTitulo: String; FLines: TStrings; procedure SetLines(const Value: TStrings); protected public constructor Create(AOwner: TComponent); destructor Destroy; override; procedure Assign(Source: TPersistent); override; published property Ativo: Boolean read FAtivo write FAtivo; property Titulo: String read FTitulo write FTitulo; property Mensagem: TStrings read FLines write SetLines; end; TUCMEsqueceuSenha = class(TUCMailMessage) private FLabelLoginForm: String; FMailEnviado: String; protected public published property LabelLoginForm: String read FLabelLoginForm write FLabelLoginForm; property MensagemEmailEnviado: String read FMailEnviado write FMailEnviado; end; TMessageTag = procedure(Tag: String; var ReplaceText: String) of object; TMailUserControl = class(TComponent) private FPorta: Integer; FEmailRemetente: String; FUsuario: String; FNomeRemetente: String; FSenha: String; FSMTPServer: String; FAdicionaUsuario: TUCMailMessage; FSenhaTrocada: TUCMailMessage; FAlteraUsuario: TUCMailMessage; FSenhaForcada: TUCMailMessage; FEsqueceuSenha: TUCMEsqueceuSenha; fAuthType: TAlSmtpClientAuthType; function ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String; function TrataSenha(Senha: String; Key: Word): String; procedure onStatus(Status: String); protected procedure EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); procedure EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); procedure EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String); procedure EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word); procedure EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word); published property AuthType : TAlSmtpClientAuthType read fAuthType write fAuthType; property ServidorSMTP: String read FSMTPServer write FSMTPServer; property Usuario: String read FUsuario write FUsuario; property Senha: String read FSenha write FSenha; property Porta: Integer read FPorta write FPorta default 0; property NomeRemetente: String read FNomeRemetente write FNomeRemetente; property EmailRemetente: String read FEmailRemetente write FEmailRemetente; property AdicionaUsuario: TUCMailMessage read FAdicionaUsuario write FAdicionaUsuario; property AlteraUsuario: TUCMailMessage read FAlteraUsuario write FAlteraUsuario; property EsqueceuSenha: TUCMEsqueceuSenha read FEsqueceuSenha write FEsqueceuSenha; property SenhaForcada: TUCMailMessage read FSenhaForcada write FSenhaForcada; property SenhaTrocada: TUCMailMessage read FSenhaTrocada write FSenhaTrocada; end; implementation uses UCBase, UCEMailForm_U; { TMailAdicUsuario } procedure TUCMailMessage.Assign(Source: TPersistent); begin if Source is TUCMailMessage then begin Self.Ativo := TUCMailMessage(Source).Ativo; Self.Titulo := TUCMailMessage(Source).Titulo; Self.Mensagem.Assign(TUCMailMessage(Source).Mensagem); end else inherited; end; constructor TUCMailMessage.Create(AOwner: TComponent); begin FLines := TStringList.Create; end; destructor TUCMailMessage.Destroy; begin SysUtils.FreeAndNil(FLines); inherited; end; procedure TUCMailMessage.SetLines(const Value: TStrings); begin FLines.Assign(Value); end; { TMailUserControl } constructor TMailUserControl.Create(AOwner: TComponent); begin inherited; AdicionaUsuario := TUCMailMessage.Create(self); AdicionaUsuario.FLines.Add('Inclusão de usuário'); AdicionaUsuario.FLines.Add(''); AdicionaUsuario.fLines.Add('Nome...: :nome'); AdicionaUsuario.fLines.Add('Login..: :login'); AdicionaUsuario.fLines.Add('Senha..: :senha'); AdicionaUsuario.fLines.Add('Email..: :email'); AdicionaUsuario.fLines.Add('Perfil.: :perfil'); AdicionaUsuario.fTitulo := 'Inclusão de usuário'; AlteraUsuario := TUCMailMessage.Create(self); AlteraUsuario.FLines.Add('Alteração de usuário'); AlteraUsuario.FLines.Add(''); AlteraUsuario.fLines.Add('Nome...: :nome'); AlteraUsuario.fLines.Add('Login..: :login'); AlteraUsuario.fLines.Add('Senha..: :senha'); AlteraUsuario.fLines.Add('Email..: :email'); AlteraUsuario.fLines.Add('Perfil.: :perfil'); AlteraUsuario.fTitulo := 'Alteração de usuário'; EsqueceuSenha := TUCMEsqueceuSenha.Create(self); EsqueceuSenha.FLines.Add('Esquecia a senha'); EsqueceuSenha.FLines.Add(''); EsqueceuSenha.fLines.Add('Nome...: :nome'); EsqueceuSenha.fLines.Add('Login..: :login'); EsqueceuSenha.fLines.Add('Senha..: :senha'); EsqueceuSenha.fLines.Add('Email..: :email'); EsqueceuSenha.fLines.Add('Perfil.: :perfil'); EsqueceuSenha.fTitulo := 'Lembrete de senha'; SenhaForcada := TUCMailMessage.Create(self); SenhaForcada.FLines.Add('Troca de senha forçada'); SenhaForcada.FLines.Add(''); SenhaForcada.fLines.Add('Nome...: :nome'); SenhaForcada.fLines.Add('Login..: :login'); SenhaForcada.fLines.Add('Senha..: :senha'); SenhaForcada.fLines.Add('Email..: :email'); SenhaForcada.fLines.Add('Perfil.: :perfil'); SenhaForcada.fTitulo := 'Troca de senha forçada'; SenhaTrocada := TUCMailMessage.Create(self); SenhaTrocada.FLines.Add('Alteração de senha'); SenhaTrocada.FLines.Add(''); SenhaTrocada.fLines.Add('Nome...: :nome'); SenhaTrocada.fLines.Add('Login..: :login'); SenhaTrocada.fLines.Add('Senha..: :senha'); SenhaTrocada.fLines.Add('Email..: :email'); SenhaTrocada.fLines.Add('Perfil.: :perfil'); SenhaTrocada.fTitulo := 'Alteração de senha'; fAuthType := alsmtpClientAuthPlain; if csDesigning in ComponentState then begin Porta := 25; AdicionaUsuario.Ativo := True; AlteraUsuario.Ativo := True; EsqueceuSenha.Ativo := True; SenhaForcada.Ativo := True; SenhaTrocada.Ativo := True; EsqueceuSenha.LabelLoginForm := RetornaLingua( ucPortuguesBr, 'Const_Log_LbEsqueciSenha'); EsqueceuSenha.MensagemEmailEnviado := RetornaLingua( ucPortuguesBr,'Const_Log_MsgMailSend'); end; end; destructor TMailUserControl.Destroy; begin SysUtils.FreeAndNil(FAdicionaUsuario); SysUtils.FreeAndNil(FAlteraUsuario); SysUtils.FreeAndNil(FEsqueceuSenha); SysUtils.FreeAndNil(FSenhaForcada); SysUtils.FreeAndNil(FSenhaTrocada); inherited; end; procedure TMailUserControl.EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); begin Senha := TrataSenha(Senha, Key); EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AdicionaUsuario); end; procedure TMailUserControl.EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); begin Senha := TrataSenha(Senha, Key); EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AlteraUsuario); end; procedure TMailUserControl.EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String); begin EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaForcada); end; procedure TMailUserControl.EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word); begin EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaTrocada); end; function TMailUserControl.ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String; begin Txt := StringReplace(txt, ':nome', nome, [rfReplaceAll]); Txt := StringReplace(txt, ':login', login, [rfReplaceAll]); Txt := StringReplace(txt, ':senha', senha, [rfReplaceAll]); Txt := StringReplace(txt, ':email', email, [rfReplaceAll]); Txt := StringReplace(txt, ':perfil', perfil, [rfReplaceAll]); Result := Txt; end; procedure TMailUserControl.onStatus( Status : String ); begin if not Assigned(UCEMailForm) then Exit; UCEMailForm.lbStatus.Caption := Status; UCEMailForm.Update; end; procedure TMailUserControl.EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage); var MailMsg : TAlSmtpClient; MailRecipients : TStringlist; MailHeader : TALSMTPClientHeader; begin if Trim(Email) = '' then Exit; MailMsg := TAlSmtpClient.Create; MailMsg.OnStatus := OnStatus; MailRecipients := TStringlist.Create; MailHeader := TALSMTPClientHeader.Create; MailHeader.From := EmailRemetente; //'rodrigo@oxio.com.br'; MailHeader.SendTo := Email ; MailRecipients.Append(Email); MailHeader.Subject := UCMSG.Titulo; try try UCEMailForm := TUCEMailForm.Create(Self); UCEMailForm.lbStatus.Caption := ''; UCEMailForm.Show; UCEMailForm.Update; MailMsg.SendMail(ServidorSMTP, FPorta, NomeRemetente , MailRecipients, Usuario, Senha, fAuthType , MailHeader.RawHeaderText, ParseMailMSG(Nome, Login, USenha, Email, Perfil, UCMSG.Mensagem.Text)); UCEMailForm.Update; except on e: Exception do begin Beep; UCEMailForm.Close; MessageDlg(E.Message,mtWarning,[mbok],0); raise; end; end; finally FreeAndNil(MailMsg); FreeAndNil(MailHeader); FreeAndNil(MailRecipients); FreeAndNil(UCEMailForm); end; end; procedure TMailUserControl.EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word); begin if Trim(Email) = '' then Exit; try Senha := TrataSenha(Senha, Key); EnviaEmailTP(Nome, Login, Senha, Email, Perfil, EsqueceuSenha); MessageDlg(EsqueceuSenha.MensagemEmailEnviado, mtInformation, [mbOK], 0); except end; end; function TmailUserControl.TrataSenha(Senha: String; Key: Word): String; begin Result := Decrypt(Senha, Key); end; end.