Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [java] invio mail con testo html

    Ciao,
    vorrei inviare del testo html in una mail...uso il seguente codice:

    codice:
    public void sendMessaggio( String daChi, String aChi, String oggetto, String testoMessaggio )throws Exception { 
       
          sessione = Session.getDefaultInstance( pro );
          Transport t = sessione.getTransport( "smtp" ); 
          messaggio = new MimeMessage(sessione); 
          da = new InternetAddress(daChi); 
          a = InternetAddress.parse(aChi);
          
          messaggio.setContent("This is a test", "text/html; charset=iso-8859-1");
          messaggio.setFrom(da);
          messaggio.setRecipients(Message.RecipientType.TO, a); 
          messaggio.setRecipient(Message.RecipientType.CC, new InternetAddress("xxxxxx@alice.it"));
          messaggio.setSubject(oggetto); 
          messaggio.setSentDate(new Date()); 
          messaggio.setText(testoMessaggio); 
          t.connect(); 
          t.send( messaggio ); 
          t.close(); 
         
      }
    In cui dentro TestoMessaggio c'è dell'html.
    Non riesco a settare il content/type in modo da visualizzare correttamente il testo in html...

    Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    codice:
     messaggio.setContent("This is a test", "text/html; charset=iso-8859-1");
    prova a inserire solo "text/html" e non specificare la codifica

    codice:
    messaggio.setContent("This is a test", "text/html");
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Ho provato a fare come dicevi...ma la mail arriva ugualmente in formato "text/plain" come si può vedere sotto:

    codice:
    Return-Path: <xx@xx.xx>
    Original-Recipient: rfc822;nrocco@xxx.xx
    Received: from vsmtp2alice.tin.it (192.xxx.xx.222) by ims9e.cp.tin.it (7.xxx.xxx.1)
            id 42E10777000E91F9 for nrocco@xxx.xx; Wed, 27 Jul 2005 14:08:36 +0200
    Received: from piskui-bfd345d4 (xxx.54.xxx.91) by vsmtp2alice.tin.it (7.xxx.xxx.1)
            id 42E660060001836D; Wed, 27 Jul 2005 14:08:36 +0200
    Message-ID: <16949413.01122466120453.JavaMail.Prova@piskui-bfe345d4>
    Date: Wed, 27 Jul 2005 14:08:40 +0200 (CEST)
    From: xxxx@xxxx.xx
    To: utente@email.it
    Subject: Prova mail
    Cc: xxxx@xxxx.it
    MIME-Version: 1.0
    
    Content-Type: text/plain; charset=us-ascii 
    
    Content-Transfer-Encoding: 7bit
    che faccio? qualche suggerimento?

    Io un pò dubito di quell'istruzione...

    codice:
    messaggio.setContent("This is a test", "text/html");
    a cosa serve la stringa "This is a test" se devo solo settare il Content-Type della mail?

  4. #4
    il metodo setContent della classe Messagge riceve due parametri che sono il contenuto del messaggio (oggeto di tipo object, generalmente la stringa da visualizzare nella mail) e la modalità di visualizzazione (tipologia del messaggio).
    Quindi ad esempio
    codice:
    messaggio.setContent("This is a test", "text/html");
    mostrerà nella mail una scritta 'This is a text' in grassetto.
    Se invece mettessi "text/plan" come secondo parametro nella mail comparirebbe la scritta This is a test.

    Sul perchè da te l'impostazione del content-type non funziona non so.
    Mi viene da pensare che il server smtp che utilizzi non supporti il content di tipo html e di default metta tutto su testo.

  5. #5
    forse ho capito il motivo: tu utilizzi il metodo setText,

    dalle API della sun vedo che tale metodo è <<
    A convenience method that sets the given String as this part's content with a MIME type of "text/plain". >>
    Quindi di fatto tu prima setti il content in html, poi con il metodo setText lo rimetti a testo normale.
    Usa semplicemente
    codice:
    messaggio.setContent(testoMessaggio, "text/html");

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ti ho dato quel consiglio perchè ho letto questo: http://www.mokabyte.it/2004/01/javamail-3.htm

    Leggi dal numero uno della guida, magari trovi consigli anche su altro.

    Sempre in quel link c'è un esempio per mandare HTML via api javamail:

    codice:
    import java.util.*;
    
    import javax.activation.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    
    public class InvioHTML {
    
      public static void main( String[] args ) {
        try {
          Properties props = System.getProperties();
          props.put( "mail.smtp.host", args[0] );
    
          Session session = Session.getDefaultInstance( props );
          Message message = new MimeMessage( session );
    
          InternetAddress from = new InternetAddress( "max@bigatti.it" );
          InternetAddress to[] = InternetAddress.parse( "max@bigatti.it" );
    
          message.setFrom( from );
          message.setRecipients( Message.RecipientType.TO, to );
          message.setSubject( "[Mokabyte] - Messaggio HTML" );
          message.setSentDate( new Date() );
    
          String html = "<h1>Messaggio da Mokabyte</h1>" +
                        "<img src=\"cid:foto_logo\">
    " +
                        "Mokabyte &egrave; felice di inviarti questo divertente " +
                        "messaggio HTML attraverso le API Javamail";
    
          //crea la parte testuale
          BodyPart messageBodyPart1 = new MimeBodyPart();
          messageBodyPart1.setContent( html, "text/html" );
    
          //allega l'immagine
          DataSource source = new FileDataSource( "foto_logo.gif" );
          BodyPart messageBodyPart2 = new MimeBodyPart();
          messageBodyPart2.setDataHandler( new DataHandler(source) );
          //messageBodyPart2.setFileName( "foto_logo.gif" );
          messageBodyPart2.setHeader("Content-ID","<foto_logo>");
          messageBodyPart2.setDisposition( Part.ATTACHMENT );
    
          //aggiunge le parti all'oggetto multipart
          Multipart multipart = new MimeMultipart();
          multipart.addBodyPart( messageBodyPart1 );
          multipart.addBodyPart( messageBodyPart2 );
    
          //imposta come contenuto del messaggio l'oggetto multipart
          message.setContent(multipart); 
    
          Transport.send(message);
        } catch(MessagingException e) {
          e.printStackTrace();
        }
      }
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Grazie mille a tutti...vi farò sapere se funziona!
    Comunque già leggendo i post ho capito cosa mancava e cosa sbagliavo!!

    Ancora grazie.

    Ciao

  8. #8
    Funziona tutto...era proprio quel setText che faceva ricambiare il content-type della mail...il resto era corretto!

    Ora...approfitto un pò della vostra gentilezza per chiedere un'ultimissima cosa sull'argomento: vorrei settare il cosidetto EHLO...diciamo il nome utente che compare al posto dell'indirizzo del mittente. Io faccio così:
    codice:
    pro = System.getProperties(); 
            pro.put( "mail.smtp.host", po ); 
            pro.put( "mail.user", user);
    dove po è l'smtp e user (String) è il nome che voglio visualizzare.

    Poi la riga:
    codice:
    sessione = Session.getDefaultInstance( pro );
    dovrebbe includere nella sessione queste proprietà che ho settato...ma la mail arriva con l'indirizzo "visibile"!

    Qualche idea?

    Grazie.
    Ciao

  9. #9
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    dimmi se così funziona:

    codice:
    ...
    String mittente = "\"netarrow\" <netarrow@mail.com>";
    message.setFrom(new InternetAddress(mittente));
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  10. #10
    netarrow...lasciatelo dire...6 UN GENIO!!!!

    GRAZIE! FUNZIONA TUTTO!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.