Newsgroup: it.comp.lang.delphi
Titolo: IdSMTP e Spam

Salve a tutto il NG.
Ho creato un'applicazione che invia delle mail con un allegato PDF e un logo 
JPG come multipart/alternative.
Il problema è che alcuni clienti non ricevono nessuna mail anche se il 
sistema non segnala errori e al mio indirizzo (inserito come cc) arriva 
correttamente. L'idea che mi sono fatto è che alcuni server blocchino la 
mail per qualche ragione legata allo spam, ma forse potrebbe essere 
sufficiente inserire qualche extra header o qualche altra riga nel codice.
Per lo sviluppo ho usato D2006 con Indy 10 e questo è il codice che invia la 
mail:
function TfrmPrincipale.SendMail(Recipient, Oggetto, aDoc, Address, 
Messaggio: string): boolean;
const sLogo = 'logo_LA.jpg';
var   Risultato: boolean;
var
  AdressItem    : TIdEMailAddressItem;
  CcItem        : TIdEMailAddressItem;
  AMessage      : TIdMessage;
  ASMTP         : TIdSMTP;
  IdBody        : TIdText;
  //IdHTML      : TIdText;
  //idStars     : TIdAttachmentFile;
  Allegato      : TIdAttachmentFile;
  testo_non_html: string;
begin
  Screen.Cursor := crHourGlass;
  AMessage := TIdMessage.Create(nil);
  //AMessage.NoDecode := False;
  //AMessage.NoEncode := False;
  AMessage.ConvertPreamble := False;
  AMessage.ContentType := 'multipart/mixed';
  //AMessage.ContentType := 'multipart/alternative';
  AMessage.Encoding := meMIME;
  // Impostiamo il recipiente dei destinatari.
  AdressItem := AMessage.Recipients.Add;
  AdressItem.Name := Recipient;
  AdressItem.Address := Address;
  CcItem := AMessage.CCList.Add;
  CcItem.Name := 'Invio per conoscenza;
  CcItem.Address := '
invii@dominio_del_mittente.it
';
  // Impostiamo il Soggetto.
  AMessage.Subject := Oggetto;
  // Impostiamo il Sender.
 
AMessage.Sender.Name
 := 'Ragione sociale del mittente';
  AMessage.Sender.Address := self.parametri.indirizzo;
  // Impostiamo il From.
 
AMessage.From.Name
 := 
AMessage.Sender.Name
;
  AMessage.From.Address := AMessage.Sender.Address;
  IdBody := TIdText.Create(AMessage.MessageParts);
  IdBody.Body.Text := '';  //Not really needed, makes it clear
  IdBody.ContentType := 'multipart/alternative';
  IdBody.ParentPart := -1;
  // Creiamo il text plain.
  IdBody := TIdText.Create(AMessage.MessageParts);
  IdBody.ContentType := 'text/plain';
  IdBody.ContentTransfer := '7bit';
    testo_non_html := AnsiReplaceStr(messaggio, '\r\n', #13);
    testo_non_html := AnsiReplaceStr(testo_non_html, '<span 
style="font-weight:600;">', '');
    testo_non_html := AnsiReplaceStr(testo_non_html, '</span>', '');
    testo_non_html := AnsiReplaceStr(testo_non_html, '<b>', '');
    testo_non_html := AnsiReplaceStr(testo_non_html, '</b>', '');
    testo_non_html := AnsiReplaceStr(testo_non_html, '&#147;', '"');
    testo_non_html := AnsiReplaceStr(testo_non_html, '&#148;', '"');
  IdBody.Body.Add(testo_non_html);
  IdBody.ParentPart := 0;
    IdBody := TIdText.Create(AMessage.MessageParts);
    IdBody.Body.Text := '';  //Not really needed, makes it clear
    IdBody.ContentType := 'multipart/related';
    IdBody.ParentPart := 0;
  //Parte 3 (la versione html del messaggio)...
  IdBody := TIdText.Create(AMessage.MessageParts);
  IdBody.Body.Add('   <table cellpadding="1" cellspacing="1" 
style="border:0;">');
    IdBody.Body.Add('   <tr>');
      IdBody.Body.Add('   <td style="vertical-align:top;"><img 
src="cid:<'+sLogo+'>" alt="" title="" valign="top" /></td>');
      IdBody.Body.Add('   <td style="text-align:justify;">');
      IdBody.Body.Add(      AnsiReplaceStr(messaggio, '\r\n', '<br />'));
      IdBody.Body.Add('   </td>');
    IdBody.Body.Add('   </tr>');
  IdBody.Body.Add('   </table>');
  IdBody.ContentTransfer := 'quoted-printable';
  IdBody.ContentType := 'text/html';
  IdBody.ParentPart := 2;
  //Aggiungiamo il logo
  Allegato := TIdAttachmentFile.Create(AMessage.MessageParts, sLogo);
  Allegato.ContentTransfer := 'base64';
  Allegato.FileName            := sLogo;
  Allegato.ContentType         := 'image/jpeg';
  Allegato.ContentDisposition  := 'inline';
  Allegato.ExtraHeaders.Values['content-id'] := '<' + sLogo + '>';
  Allegato.DisplayName         := '<Logo>';
  Allegato.ParentPart := 2;
  if Trim(aDoc) <> '' then begin
    // Aggiungiamo l'allegato. Non dimenticare gli extra headers!
    Allegato := TIdAttachmentFile.Create(AMessage.MessageParts, aDoc);
    Allegato.ContentTransfer := 'base64';
    Allegato.ExtraHeaders.Values['Content-ID'] := '<' + aDoc + '>';
    Allegato.ContentType := 'application/pdf';
    Allegato.ParentPart := -1;
  end;
  // Inviamo la mail...
  Risultato := True;
  ASMTP := TIdSMTP.Create(nil);
  ASMTP.Host := self.parametri.server_smtp;
  ASMTP.Port := self.parametri.porta_smtp;
  ASMTP.AuthType := atNone;
  ASMTP.Connect;
  try
    ASMTP.Send(AMessage);
  except
    on E: Exception do begin
      //ShowMessageFmt('ERRORE! %s ha generato il seguente messaggio: ' + 
#10#13 + ' %s', [E.ClassName, E.Message]);
      Risultato := False;
    end;
  end;
  ASMTP.Disconnect;
  AMessage.Free;
  ASMTP.Free;
  Screen.Cursor := crDefault;
  Result := Risultato;
end;
Spero di aver detto tutto e che il problema sia chiaro. Grazie a tutti
Luca 

 sufficiente inserire qualche extra header o qualche altra riga nel codice.
Se fosse possibile bypassare i filtri Anti-SPAM con un header, saremo
nella cacca.
Sono i tuoi clienti che devono configurare i loro filtri/server/firewall
ecc. per poter ricevere le tue e-mail.
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ecc. per poter ricevere le tue e-mail.
Il problema è che alcuni clienti hanno mail su libero o altri ISP su cui non 
possono cambiare i filtri.
Comunque non so se il problema dipende dai filtri anti-spam in quanto se 
l'invio delle mail, anzichè in delphi, la faccio con una pagina php, il 
tutto funziona correttamente. E' per questo che chiedevo se magari avessi 
dimenticato qualche header nel codice.
Luca 

Luca Vitali ha scritto:


Con gli stessi allegati?
In questo caso, prova a farti dare gli header della posta che ricevono e
confrontali con i tuoi header.


Il problema si è presentato di nuovo. Non capisco da cosa può dipendere.
Di seguito posto le intestazioni della mail che arriva:
Delivered-To: #mail destinatario#
Received: by 10.65.206.12 with SMTP id i12cs231075qbq;
        Wed, 9 May 2007 01:00:54 -0700 (PDT)
Received: by 10.66.242.5 with SMTP id p5mr1110620ugh.1178697653678;
        Wed, 09 May 2007 01:00:53 -0700 (PDT)
Return-Path: <#mail di risposta#>
Received: from 
lineappalti.it
 ([212.78.2.177])
        by 
mx.google.com
 with SMTP id j2si2434669ugf.2007.05.09.05.15.24;
        Wed, 09 May 2007 01:00:53 -0700 (PDT)
Received-SPF: neutral (
google.com
: 212.78.2.177 is neither permitted nor 
denied by best guess record for domain of #mail mittente#)
Received: (qmail 16205 invoked from network); 9 May 2007 12:15:22 -0000
Received: from unknown (HELO amd64) (213.140.11.129)
  by #SMTP mittente# with SMTP; 9 May 2007 12:15:22 -0000
Message-ID: <002001c79210$2cbfd550$f500a8c0@amd64>
From: "#Nome mittente#" <#mail mittente#>
Subject: Comunicazione dal sistema
To: <#mail destinatario#>
Cc: <#mail per cc#>
Content-Type: multipart/mixed; boundary="piCc6Gm4UhuwmNKbxSr1jsIFA2RZl=_7q3"
MIME-Version: 1.0
Sender: "#Nome mittente" <#mail mittente#>
Reply-To: "Nome mittente#" <#mail mittente#>
Date: Wed, 9 May 2007 10:00:56 +0200
X-Antivirus: avast! (VPS 000738-4, 07/05/2007), Outbound message
X-Antivirus-Status: Clean
X-Spam-Rating: 
mail.lineappalti.it
 1.6.2 0/1000/N
Invece le seguenti sono le intestazioni della mail inviata tramite outlook 
express:
Delivered-To: #mail destinatario#
Received: by 10.65.206.12 with SMTP id i12cs231075qbq;
        Wed, 9 May 2007 01:00:54 -0700 (PDT)
Received: by 10.66.242.5 with SMTP id p5mr1110620ugh.1178697653678;
        Wed, 09 May 2007 01:00:53 -0700 (PDT)
Return-Path: <#mail di risposta#>
Received: from 
aa014msr.fastwebnet.it
 (
aa014msr.fastwebnet.it
 [85.18.95.74])
        by 
mx.google.com
 with ESMTP id s1si2071626uge.2007.05.09.01.00.52;
        Wed, 09 May 2007 01:00:53 -0700 (PDT)
Received-SPF: pass (
google.com
: domain of #mail mittente# designates 
85.18.95.74 as permitted sender)
Received: from amd64 (1.243.173.7) by 
aa014msr.fastwebnet.it
 (7.3.105.6)
        id 463F467A001B4989; Wed, 9 May 2007 10:00:51 +0200
Message-ID: <002001c79210$2cbfd550$f500a8c0@amd64>
From: "#Nome mittente#" <#mail mittente#>
To: <#mail destinatario#>
Cc: <#mail per cc#>
Subject: Comunicazione dal sistema
Date: Wed, 9 May 2007 10:00:56 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
 type="multipart/alternative";
 boundary="----=_NextPart_000_001C_01C79220.F005CFF0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.3028
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028
X-Antivirus: avast! (VPS 000738-4, 07/05/2007), Outbound message
X-Antivirus-Status: Clean
Ci sono delle differenze ma non so come modificare il codice di costruzione 
della mail in modo che i server non la blocchino come potenziale spam.
Qualcuno mi ha detto che nella mail spedita dal programma in delhi manca 
qualche intestazione oppure c'è un'intestazione di troppo che i nuovi server 
identificano come probabile spam e la bloccano.
Qualcuno sa aiutarmi?
Grazie
Luca