Pergunta : Dinamitador do email de Delphi - possivelmente using o construtor e o PsRBExportDevices do relatório

Eu estou usando Delphi 2009, construtor do relatório e PsRBExportDevices PRO.

I quer criar um módulo do dinamitador do email em nossa aplicação com as seguintes caraterísticas: o programa do
a) funciona uma pergunta para retornar uma série de dados do usuário do customers
b) é alertado para projetar seu
c) que cada página do relatório está enviada por correio electrónico ao cliente correspondente com projeto do relatório enquanto o corpo do

I am do email (NÃO COMO UM ACESSÓRIO) aberto a TODO O email das idéias/sugestions.

IMPORTANT REQUIREMENTS
* precisa de suportar o formato (por exemplo cores/pias batismais/gráficos) - assim que deve ser o rtf ou o dinamitador do email do format
* do email do HTML precisa de poder emitir centenas de email sem começ obstruído pelo filter
* do anti-Spam do mail server este módulo tem que ser controlado ou pelo menos controlado por nosso applicaton
* de Delphi preferir não ter que exportar para o ó partido o
* da solução (mas o considerará) que para (b) o editor pode ser construtor do relatório/MS Word/algum
* do editor do HTML para (b) se usando o editor do HTML então que editor? (por exemplo componente de delphi) E como fundir campos de dados de nossas aplicações? o

minha melhor tentativa tem sido até agora fazer isto:
1) Usar o construtor do relatório para produzir um relatório separado por o uso PsRBExportDevices do
2 do cliente (não um problema grande)) exportar o relatório para uma lima do pdf no Temp que de Windows o dir
3) ajustou PsRBExportMasterControl.PDF.EmailAfterGenerate: =true
4) Ajustar o evento de PsRBExportMasterControl.PDF.OnEmail ao tIdSMTP unido do uso INDY do below
5 do certificado) e o tIdMessage para emitir os maiores problemas do email

The com minha tentativa é aquele: o
i) que eu não posso conseguir o índice do relatório se transformar o corpo do email + mim gostaria de gráficos no corpo do
ii do email também) eu começ edições do Spam para alguns usuários do correio (IE o usuário de emissão não o usuário de recepção) - estes usuários não gosto de me que emite lotes dos email em um curto período.  Mas como a probabilidade começ afastado com ela (por exemplo quando foi fora de linha com lotes dos email prontos para emitir)?

Perhaps que eu devo apenas dar acima e usar uma companhia do mercado do email do ó partido tal como o seguinte: rel= " nofollow " do " _blank " " do target= de " http://www.emailmarketingsoftware.com.au/email-newsletters do href= do * > rel= " nofollow " do " _blank " " do target= de " http://www.vision6.com.au/ do href= do * do -newsletters do oftware.co m.au/email de http://www.emailmarketings > rel= " nofollow " do " _blank " " do target= de " http://www.futuremail.com.au/ do href= do
* de http://www.vision6.com.au/ > http://www.futuremail.com. o rel= " nofollow " do " _blank " " do target= de " http://www.ezymsg.com/ do href= do au/
* > http://www.ezymsg.com/
BUT, se nós vamos abaixo deste
* do trajeto… mim deve poder facilmente às lista de cliente da exportação, detalha o
* que etc. (pode ser diferente para cada email funcionado) eu o preferiria realmente parecer porque uma caraterística sem emenda em nosso software/um pouco do que manda o usuário controlar a exportação/import
* eu realmente gostaria de poder exportar o índice como indicações/faturas do cliente no corpo de cada email por o customer

As eu disse que eu estou aberto a todas as idéias/recomendações.  
THANK VOCÊ adiantado a todo o contributors.
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
>procedure notpretty TPrintBaseForm.PsRBExportMasterControlEMail " do class= " do id= " codeSnippet652600 do
 do resultado '') e (resultado [comprimento (resultado)] = “; ") então
      System.Delete (resultado, comprimento (resultado), 1);
  extremidade;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //
  procedimento DoSMTPCreate;
  começar
    se (não ConnectOnceSendMult) ou (fIdSMTP=nil) então
    começar
      fIdSMTP: =TIdSMTP.Create (auto);
      //fIdSMTP.OnConnected: =ExpMstCtrl.OnEMailConnected;
      //fIdSMTP.OnDisconnected: =ExpMstCtrl.OnEMailDisConnected;
      //fIdSMTP.OnStatus: =ExpMstCtrl.OnEMailStatus;
      fIdSMTP.Host: =EMailInfo.Host;
      fIdSMTP.UserName: =EMailInfo.UserID;
      fIdSMTP.Password: =EMailInfo.Password;
      fIdSMTP.AuthType: =satNone;
    extremidade;
  extremidade;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //
  procedimento DoSMTPConnect;
  começar
    se (não ConnectOnceSendMult) ou ((fIdSMTP<>nil) e (não fIdSMTP.Connected)) então
      fIdSMTP.Connect;
  extremidade;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //
  procedimento DoSMTPDisconnect;
  começar
    se (não ConnectOnceSendMult) ou (IsLastInSendMult e (fIdSMTP<>nil) e fIdSMTP.Connected) então
      fIdSMTP.Disconnect;
  extremidade;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //
  procedimento DoSMTPFree;
  começar
    se (não ConnectOnceSendMult) ou (IsLastInSendMult e (fIdSMTP<>nil)) então
      FreeAndNil (fIdSMTP);
  extremidade;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //
  procedimento SendEmail;
  var
    IdMessage: TIdMessage;
    IdAttachment: TIdAttachmentFile;
    i: inteiro;
  começar
    ExpMstCtrl: =PsRBExportMasterControl;
    IdMessage: =TIdMessage.Create (auto);
    tentativa
      DoSMTPCreate;

      com IdMessage fazer
      começar
        para i: =0 a EMailInfo.Attachments.Count-1 fazem
          IdAttachment: =TIDAttachmentFile.Create (MessageParts, EmailInfo.Attachments [i]);
        Body.Assign (EMailInfo.Body);
        Data: =EMailInfo.Date;
        From.Name: =EMailInfo.FromName;
        From.Address: =EMailInfo.FromAddress;
        ReplyTo.EMailAddresses: =EMailInfo.ReplyTo;
        Assunto: =EMailInfo.Subject;
        Recipients.EMailAddresses: =GetAddressString (EMailInfo.RecipientList.Text);
        CCList.EMailAddresses: =GetAddressString (EMailInfo.CCList.Text);
        BCCList.EMailAddresses: =GetAddressString (EMailInfo.BCCList.Text);
      extremidade;

      tentativa
        DoSMTPConnect;
        fIdSMTP.Send (IdMessage);
        //if atribuiu (ExpMstCtrl.OnEMailSuccess) então
        // ExpMstCtrl.OnEMailSuccess (ExpMstCtrl);
        EmailSent: =True;
        DisplayMailProgress (o “email emitido com sucesso”, retifica);
      exceto
        em E: A exceção faz
        começar
          //if atribuiu (ExpMstCtrl.OnEMailError) então
          // ExpMstCtrl.OnEmailError (remetente, E.Message)
          //else
          DisplayMailProgress ('erro: '+E.Message, retificam);
    	    MessageDlg (E.Message, mtError, [mbOK], 0);
          Continuar: =False;
        extremidade;
      extremidade;
    finalmente
      DoSMTPDisconnect;
      DoSMTPFree;
      IdMessage.Free;
    extremidade;
  extremidade;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ de //  
começar
  se EmailDialogsEnabled então
  começar
    EmailParamFrm: =TEmailParamsForm.Create (auto, nada);
    com EmailParamFrm, EMailInfo, TransPostHelper.EmailTemplatesTable faz
    tentativa
      edFromName.Text: =FieldByName (“FromName ").AsString;
      edFromAddr.Text: =FieldByName (“FromAddress ").AsString;
      edTo.Text: =EmailRecipients;
      se (EmailCCRecipients<> '') então
        edCc.Text: =EmailCCRecipients
      mais
        edCc.Text: =FieldByName (“centímetro cúbico ").AsString;
      se (EmailBCCRecipients<> '') então
        edBcc.Text: =EmailBCCRecipients
      mais
        edBcc.Text: =FieldByName (“BCC ").AsString;
      se (EmailSubject<> '') então
        edSubject.Text: =EmailSubject
      mais
        edSubject.Text: =GetEmailSubject (FieldByName (“assunto ").AsString);
      se (EmailBody<> '') então
        memoBody.Lines.Text: =EmailBody
      mais
        memoBody.Lines.Text: =FieldByName (“corpo ").AsString;
      se EmailAccount<> '' então
        Subtítulo: =Caption+ - '+EmailAccount;

      res: =ShowModal;
      se res=mrYes então
      começar
        Anfitrião: = FieldByName (“anfitrião ").AsString;                 //DisplayMailProgress ('anfitrião de Host='+);
        UserID: = FieldByName (“username ").AsString;           //DisplayMailProgress ('UserId='+ UserID);
        Senha: = FieldByName (“senha ").AsString;         //DisplayMailProgress ('senha de Password='+);
        Body.Text: =memoBody.Lines.Text;                       //DisplayMailProgress ('Body='+ Body.Text);
        Data: = agora;                                          //DisplayMailProgress ('Date='+ DateToStr (data));
        FromAddress: = edFromAddr.Text;                       //DisplayMailProgress ('FromAddress='+ FromAddress);
        FromName: = edFromName.Text;                          //DisplayMailProgress ('FromName='+ FromName);
        ReplyTo: = FieldByName (“ReplyTo ").AsString;           //DisplayMailProgress ('ReplyTo='+ ReplyTo);
        Assunto: = edSubject.Text;                            //DisplayMailProgress ('assunto de Subject='+);
        RecipientList.Commatext: =edTo.Text;                   //DisplayMailProgress ('Recipient='+ RecipientList.Commatext);
        EmailRecipients: =edTo.Text;
        EmailSubject: =edSubject.Text;
        EmailBody: =memoBody.Lines.Text;
        EmailCCRecipients: =edCc.Text;
        EmailBCCRecipients: =edBcc.Text;
        CCList.Add (edCc.Text);
        BCCList.Add (edBcc.Text);
        DeleteFilesAfterEMail: =True;
        se não ReportSettings.IncludeAttachment então
          Attachments.Clear;
      extremidade
      mais se res=mrNo então
      começar
        EMailInfo.CancelEMail: =True;
        DisplayMailProgress (o “email não é emitido - a intervenção do usuário”, retifica);
// se SMProgForm<>nil então
// SMProgForm.UpdateProgress (o “email não é emitido - intervenção do usuário”, verdadeiras)
// mais se SMProgDetForm<>nil então
// SMProgDetForm.UpdateProgress (o “email não é emitido - intervenção do usuário”, verdadeiro, falso);
      extremidade
      mais se res=mrAbort então
      começar
        EMailInfo.CancelEMail: =True;
        Continuar: =False;
        DisplayMailProgress (o “email não é emitido - a intervenção do usuário”, retifica);
        DisplayMailProgress (“enviar por correio electrónico o processo é parado - intervenção do usuário”, falsas);
// se SMProgForm<>nil então
// começa
// SMProgForm.UpdateProgress (o “email não é emitido - a intervenção do usuário”, retifica);
// SMProgForm.UpdateProgress (“enviar por correio electrónico o processo é parado - intervenção do usuário”, falsas);
extremidade de //
// mais se SMProgDetForm<>nil então
// começa
// SMProgDetForm.UpdateProgress (o “email não é emitido - intervenção do usuário”, verdadeiro, falso);
// SMProgDetForm.UpdateProgress (“enviar por correio electrónico o processo é parado - intervenção do usuário”, falso, falso);
extremidade de //;
      extremidade;
    finalmente
      EmailParamFrm.Free;
    extremidade;
  extremidade
  mais
  começar
    com EMailInfo, TransPostHelper.EmailTemplatesTable fazem
    começar
      Anfitrião: = FieldByName (“anfitrião ").AsString;
      UserID: = FieldByName (“username ").AsString;
      Senha: = FieldByName (“senha ").AsString;
      se (EmailBody<> '') então
        Body.Text: =EmailBody
      mais
        Body.Text: =FieldByName (“corpo ").AsString;
      Data: = agora;
      FromAddress: = FieldByName (“FromAddress ").AsString;
      FromName: = FieldByName (“FromName ").AsString;
      ReplyTo: = FieldByName (“ReplyTo ").AsString;
      se (EmailSubject<> '') então
        Assunto: =EmailSubject
      mais
        Assunto: =GetEmailSubject (FieldByName (“assunto ").AsString);
      RecipientList.CommaText: =EmailRecipients;
      se (EmailCCRecipients<> '') então
        CCList.CommaText: =EmailCCRecipients
      mais
        CCList.CommaText: =FieldByName (“centímetro cúbico ").AsString;
      se (EmailBCCRecipients<> '') então
        BCCList.CommaText: =EmailBCCRecipients
      mais
        BCCList.CommaText: =FieldByName (“BCC ").AsString;
      DeleteFilesAfterEMail: =True;
      se não ReportSettings.IncludeAttachment então
        Attachments.Clear;
    extremidade;
  extremidade;

  se não EMailInfo.CancelEMail então
  começar
    SendEmail;
    EMailInfo.CancelEMail: =True;  // isto é parar o email do defeito que emite o acontecimento
  extremidade;
extremidade;
class= do

Resposta : Dinamitador do email de Delphi - possivelmente using o construtor e o PsRBExportDevices do relatório

Emitindo o email a seu usuário… Os usuários bons do email têm temporizadores aqui são algumas coisas a pensar aproximadamente.
Os usuários do email das coisas fazem…
1.  Limitar o número de conexões em um período de tempo
2.  Limitar o número de receptores em um único email
3.  Limitar o número de retrys
4.  Limitar o número de email emitidos em um período de tempo “pensam do atraso entre cada um emitem”
5.  Verific seu email para ver se há o “Spam” que poderia ser gráficos ou frase-chaves.  o Spam é igualmente avaliado em quantos email você emite que são “idênticos ou com pouca variação”

Peça de Delphi
emitir o email using componentes de Indy é consideravelmente fácil.  Se você precisa uma tentativa baseada molde do sistema using um formulário do HTML com os Tag feitos sob encomenda como <> etc… então o uso um produtor da página preencher iterativa os Tag.

General Tackett
  E alguns a maioria limitam o número de conexões em um período de tempo junto com o número de email emitidos em um período.  
Outras soluções  
 
programming4us programming4us