Questione : Artificiere del email di Delfi - possibilmente using il costruttore e PsRBExportDevices di rapporto

Sto usando Delfi 2009, costruttore di rapporto e PsRBExportDevices PRO.

I vuole generare un modulo dell'artificiere del email nella nostra applicazione con le seguenti caratteristiche:
a) Il programma fa funzionare una domanda per restituire un gruppo di dati dell'utente del customers
b) è richiamato per progettare il loro
c) che ogni pagina del rapporto è inviata con la posta elettronica al cliente corrispondente con il disegno di rapporto mentre il corpo del

I del email (NON COME COLLEGAMENTO) aperto a TUTTO IL email di idee/sugestions.

IMPORTANT REQUIREMENTS
* deve sostenere la formattazione (per esempio colori/fonti/grafici) - in modo da deve essere il rtf o l'artificiere del email del format
* del email del HTML deve potere trasmettere le centinaia di email senza ottenere ostruito dall'invio modulo del filter
* dello anti-Spam di mail server del questo deve essere controllato o diretto almeno dal nostro applicaton
* di Delfi preferire non dovere esportare al
* della soluzione dei terzi (ma lo considererà) per (b) il redattore può essere costruttore di rapporto/MS Word/certo
* del redattore del HTML per (b) se usando il redattore del HTML allora che redattore? (per esempio componente di Delfi) E come fondere i campi d'informazione dalle nostre applicazioni? il

finora il mio migliore tentativo è stato di fare questo: Costruttore rapporto di uso del
1) per produrre un rapporto separato per uso PsRBExportDevices del
2) esportare il rapporto verso una lima del pdf nel dir
3) PsRBExportMasterControl.PDF.EmailAfterGenerate: L'insieme del =true
4) l'evento di PsRBExportMasterControl.PDF.OnEmail al tIdSMTP allegato di uso INDY del below
5) e tIdMessage per trasmettere al email

The i problemi principali con il mio tentativo è quello: il
i) che non posso convincere il contenuto del rapporto a trasformarmi in nel corpo del email + io gradirebbe i grafici nel corpo del
ii) ottengo le edizioni dello Spam per alcuni assistenti della posta (IE l'assistente d'invio non l'assistente di ricezione) - questi assistenti non lo gradico che trasmetto i lotti dei email in un corto periodo.  Ma come la prospettiva ottiene via con esso (per esempio quando è stata fuori linea con i lotti dei email pronti a trasmettere)?

Perhaps che dovrei dare appena in su ed usare un'azienda di vendita del email dei terzi come quanto segue: rel= " nofollow " " del _blank " " del target= " di http://www.emailmarketingsoftware.com.au/email-newsletters del href= di * > rel= " nofollow " " del _blank " " del target= " di http://www.vision6.com.au/ del href= di * del -newsletters del oftware.co m.au/email di http://www.emailmarketings > rel= " nofollow " " del _blank " " del target= " di http://www.futuremail.com.au/ del href= di
* di http://www.vision6.com.au/ > http://www.futuremail.com. il rel= " nofollow " " del _blank " " del target= " di http://www.ezymsg.com/ del href= di au/
* > http://www.ezymsg.com/
BUT, se scendiamo questo
* del percorso… io deve potere facilmente alle liste di cliente dell'esportazione, dettaglia il
* ecc (può essere differente per ogni email funzionato) realmente lo preferirei per sembrare poichè una caratteristica senza giunte nel nostro software/piuttosto dell'utente dirigere l'esportazione/import
* realmente vorrei potere esportare il soddisfare come le dichiarazioni/fatture del cliente nel corpo di ogni email per customer

As ho detto che sono aperto a tutte le idee/raccomandazioni.  
THANK VOI in anticipo a tutto il contributors.
class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
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 " del class= " del id= " codeSnippet652600 del
 di risultato '') e (risultato [lunghezza (risultato)] = “; ") allora
      System.Delete (risultato, lunghezza (risultato), 1);
  estremità;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //
  procedura DoSMTPCreate;
  cominciare
    se (non ConnectOnceSendMult) o (fIdSMTP=nil) allora
    cominciare
      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;
    estremità;
  estremità;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //
  procedura DoSMTPConnect;
  cominciare
    se (non ConnectOnceSendMult) o ((fIdSMTP<>nil) e (non fIdSMTP.Connected)) allora
      fIdSMTP.Connect;
  estremità;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //
  procedura DoSMTPDisconnect;
  cominciare
    se (non ConnectOnceSendMult) o (IsLastInSendMult e (fIdSMTP<>nil) e fIdSMTP.Connected) allora
      fIdSMTP.Disconnect;
  estremità;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //
  procedura DoSMTPFree;
  cominciare
    se (non ConnectOnceSendMult) o (IsLastInSendMult e (fIdSMTP<>nil)) allora
      FreeAndNil (fIdSMTP);
  estremità;

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //
  procedura SendEmail;
  varietà
    IdMessage: TIdMessage;
    IdAttachment: TIdAttachmentFile;
    i: numero intero;
  cominciare
    ExpMstCtrl: =PsRBExportMasterControl;
    IdMessage: =TIdMessage.Create (auto);
    prova
      DoSMTPCreate;

      con IdMessage fare
      cominciare
        per la i: =0 a EMailInfo.Attachments.Count-1 fanno
          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;
        Oggetto: =EMailInfo.Subject;
        Recipients.EMailAddresses: =GetAddressString (EMailInfo.RecipientList.Text);
        CCList.EMailAddresses: =GetAddressString (EMailInfo.CCList.Text);
        BCCList.EMailAddresses: =GetAddressString (EMailInfo.BCCList.Text);
      estremità;

      prova
        DoSMTPConnect;
        fIdSMTP.Send (IdMessage);
        //if allora ha assegnato (ExpMstCtrl.OnEMailSuccess)
        // ExpMstCtrl.OnEMailSuccess (ExpMstCtrl);
        EmailSent: =True;
        DisplayMailProgress (“il email trasmesso con successo„, allinea);
      tranne
        sulla E: L'eccezione fa
        cominciare
          //if allora ha assegnato (ExpMstCtrl.OnEMailError)
          // ExpMstCtrl.OnEmailError (mittente, E.Message)
          //else
          DisplayMailProgress ('errore: '+E.Message, allineano);
    	    MessageDlg (E.Message, mtError, [mbOK], 0);
          Continuare: =False;
        estremità;
      estremità;
    infine
      DoSMTPDisconnect;
      DoSMTPFree;
      IdMessage.Free;
    estremità;
  estremità;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ di //  
cominciare
  se EmailDialogsEnabled allora
  cominciare
    EmailParamFrm: =TEmailParamsForm.Create (auto, zero);
    con EmailParamFrm, EMailInfo, TransPostHelper.EmailTemplatesTable fa
    prova
      edFromName.Text: =FieldByName (“FromName ").AsString;
      edFromAddr.Text: =FieldByName (“FromAddress ").AsString;
      edTo.Text: =EmailRecipients;
      se (EmailCCRecipients<> '') allora
        edCc.Text: =EmailCCRecipients
      altrimenti
        edCc.Text: =FieldByName (“cc ").AsString;
      se (EmailBCCRecipients<> '') allora
        edBcc.Text: =EmailBCCRecipients
      altrimenti
        edBcc.Text: =FieldByName (“BCC ").AsString;
      se (EmailSubject<> '') allora
        edSubject.Text: =EmailSubject
      altrimenti
        edSubject.Text: =GetEmailSubject (FieldByName (“oggetto ").AsString);
      se (EmailBody<> '') allora
        memoBody.Lines.Text: =EmailBody
      altrimenti
        memoBody.Lines.Text: =FieldByName (“corpo ").AsString;
      se EmailAccount<> '' allora
        Titolo: =Caption+ - '+EmailAccount;

      ricerca: =ShowModal;
      se res=mrYes allora
      cominciare
        Ospite: = FieldByName (“ospite ").AsString;                 //DisplayMailProgress ('ospite di Host='+);
        UserID: = FieldByName (“username ").AsString;           //DisplayMailProgress ('UserId='+ UserID);
        Parola d'accesso: = FieldByName (“parola d'accesso ").AsString;         //DisplayMailProgress ('parola d'accesso di Password='+);
        Body.Text: =memoBody.Lines.Text;                       //DisplayMailProgress ('Body='+ Body.Text);
        Data: = ora;                                          //DisplayMailProgress ('Date='+ DateToStr (data));
        FromAddress: = edFromAddr.Text;                       //DisplayMailProgress ('FromAddress='+ FromAddress);
        FromName: = edFromName.Text;                          //DisplayMailProgress ('FromName='+ FromName);
        ReplyTo: = FieldByName (“ReplyTo ").AsString;           //DisplayMailProgress ('ReplyTo='+ ReplyTo);
        Oggetto: = edSubject.Text;                            //DisplayMailProgress ('oggetto di 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 non ReportSettings.IncludeAttachment allora
          Attachments.Clear;
      estremità
      altrimenti se res=mrNo allora
      cominciare
        EMailInfo.CancelEMail: =True;
        DisplayMailProgress (“il email non è trasmesso - l'intervento dell'utente„, allinea);
// se SMProgForm<>nil allora
// SMProgForm.UpdateProgress (“il email non è trasmesso - intervento dell'utente„, allineare)
// altrimenti se SMProgDetForm<>nil allora
// SMProgDetForm.UpdateProgress (“il email non è trasmesso - intervento dell'utente„, allineare, falso);
      estremità
      altrimenti se res=mrAbort allora
      cominciare
        EMailInfo.CancelEMail: =True;
        Continuare: =False;
        DisplayMailProgress (“il email non è trasmesso - l'intervento dell'utente„, allinea);
        DisplayMailProgress (“inviare con la posta elettronica il processo è arrestato - intervento dell'utente„, falsi);
// se SMProgForm<>nil allora
// comincia
// SMProgForm.UpdateProgress (“il email non è trasmesso - l'intervento dell'utente„, allinea);
// SMProgForm.UpdateProgress (“inviare con la posta elettronica il processo è arrestato - intervento dell'utente„, falsi);
estremità di //
// altrimenti se SMProgDetForm<>nil allora
// comincia
// SMProgDetForm.UpdateProgress (“il email non è trasmesso - intervento dell'utente„, allineare, falso);
// SMProgDetForm.UpdateProgress (“inviare con la posta elettronica il processo è arrestato - intervento dell'utente„, falso, falso);
estremità di //;
      estremità;
    infine
      EmailParamFrm.Free;
    estremità;
  estremità
  altrimenti
  cominciare
    con EMailInfo, TransPostHelper.EmailTemplatesTable fanno
    cominciare
      Ospite: = FieldByName (“ospite ").AsString;
      UserID: = FieldByName (“username ").AsString;
      Parola d'accesso: = FieldByName (“parola d'accesso ").AsString;
      se (EmailBody<> '') allora
        Body.Text: =EmailBody
      altrimenti
        Body.Text: =FieldByName (“corpo ").AsString;
      Data: = ora;
      FromAddress: = FieldByName (“FromAddress ").AsString;
      FromName: = FieldByName (“FromName ").AsString;
      ReplyTo: = FieldByName (“ReplyTo ").AsString;
      se (EmailSubject<> '') allora
        Oggetto: =EmailSubject
      altrimenti
        Oggetto: =GetEmailSubject (FieldByName (“oggetto ").AsString);
      RecipientList.CommaText: =EmailRecipients;
      se (EmailCCRecipients<> '') allora
        CCList.CommaText: =EmailCCRecipients
      altrimenti
        CCList.CommaText: =FieldByName (“cc ").AsString;
      se (EmailBCCRecipients<> '') allora
        BCCList.CommaText: =EmailBCCRecipients
      altrimenti
        BCCList.CommaText: =FieldByName (“BCC ").AsString;
      DeleteFilesAfterEMail: =True;
      se non ReportSettings.IncludeAttachment allora
        Attachments.Clear;
    estremità;
  estremità;

  se non EMailInfo.CancelEMail allora
  cominciare
    SendEmail;
    EMailInfo.CancelEMail: =True;  // questo è di arrestare il email di difetto che trasmette l'avvenimento
  estremità;
estremità;
class= del

Risposta : Artificiere del email di Delfi - possibilmente using il costruttore e PsRBExportDevices di rapporto

Trasmettendo email al vostro assistente… Gli assistenti buoni del email hanno temporizzatori qui sono alcune cose da pensare circa.
Gli assistenti del email di cose fanno…
1.  Limitare il numero dei collegamenti in un periodo
2.  Limitare il numero dei destinatari in un singolo email
3.  Limitare il numero dei retrys
4.  Limitare il numero dei email introdotti un periodo “pensano a ritardo fra ciascuno trasmettono„
5.  Controllare il vostro email per vedere se c'è “lo Spam„ in grado di essere grafici o frasi chiave.  lo Spam è inoltre stimato su quanti email trasmettete che sono “identici o con poca variazione„

Parte di Delfi
trasmettendo il email using le componenti di Indy è abbastanza facile.  Se avete bisogno di una prova del sistema basata mascherina using una forma del HTML con le modifiche su ordinazione come <> ecc… allora usare un produttore della pagina per riempire iteratamente le modifiche.

General Tackett
  Ed alcuni la maggior parte limitano il numero dei collegamenti in un periodo con il numero dei email introdotti un periodo.  
Altre soluzioni  
 
programming4us programming4us