Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: problema sender mail

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44

    problema sender mail

    Salve, la mia applicazione prevede l'invio di una mail, vorrei che questa mail non visualizzi l'indirizzo mittente, ma un'indirizzo fittizio deciso da me...

    Qualcuno ha idee da suggerirmi???Se serve posso postare del codice.

    Ringrazio chiunque provi ad aiutarmi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    L'indirizzo che viene mostrato lo decidi tu: è semplicemente uno degli header del protocollo smtp.

    Comunque, oltre agli esempi che trovi anche qui sul forum (inclusa una pillola di LeleFT per l'invio di email senza l'utilizzo delle API JavaMail), tieni sempre a portata di mano

    http://java.sun.com/developer/online...ail/index.html

    ed in particolare

    http://java.sun.com/developer/online.../contents.html

    sempre nella sezione JavaMail del sito della sun trovi anche vari technical tips per implementare funzionalità avanzate.

    Venendo comunque al nocciolo della questione, per settare l'indirizzo del mittente con JavaMail, una volta istanziato il tuo MimeMessage

    codice:
    MimeMessage message = ...
    Non ti resta che settare la proprietà from

    codice:
    message.setFrom(indirizzo_mittente);
    dove indirizzo è a sua volta un Address, ovvero qualcosa del genere
    codice:
    Address indirizzo_mittente = new InternetAddress("tuoindirizzomittente@provider.xyz");
    Tanto basta. Trovi comunque esempi di codice in abbondanza al secondo link che ho postato più in alto.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Ciao Andrea,

    ti ringrazio molto per avermi risposto, purtroppo avevo gia provato passando un'indirizzo nel setFrom(...) di MimeMessage, purtroppo non funziona, ho provato anche a passare un secondo parametro a InternetAddress(una stringa che indica il personal name) new InternetAddress("mioindiriz@posta.com","indirizzo_ fittizio@provider.xyz") , ma in quest'ultimo caso mi visualizza indirizzo_fittizio@provider.xyz [mioindiriz@posta.com] e non riesco a togliere del tutto il mio indirizzo...

    Se hai qualche altra idea ti ringrazio anticipatamente...Ora mi vado a vedere i link da te inviatemi.

    Cia cia

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Che cosa non funziona esattamente (tipo, ricevi un errore? Oppure tutto sembra andare a buon fine e poi invece l'email non viene inviata?)

    Tieni presente che puoi "mascherare" l'indirizzo email da cui mandi, ma dovrai comunque passare per un server di posta in uscita e possibilmente una qualche autenticazione. Per esempio, mettendo un po' mano ad una delle applicazioni di test che trovi da qualche parte in JavaMail:

    codice:
    import java.io.*;
    import java.net.InetAddress;
    import java.util.Properties;
    import java.util.Date;
    
    import javax.mail.*;
    import javax.mail.internet.*;
    
    import com.sun.mail.smtp.*;
    
    /**
     * Demo app that shows how to construct and send an RFC822
     * (singlepart) message.
     *
     * XXX - allow more than one recipient on the command line
     *
     * This is just a variant of msgsend.java that demonstrates use of
     * some SMTP-specific features.
     *
     * @author Max Spivak
     * @author Bill Shannon
     */
    
    public class StrippedSMTPSend {
    
        private String mailer = "SendMailSMTP";
        private String prot = "smtp";
        private String mailhost = "out.alice.it";
        private boolean auth = true;
        private boolean debug = true;
        private boolean verbose = false;
        private String user = "xxxxxxxx";
        private String password = "xxxxxxxx";
    
        private String from = "kewell11@html.it";
        private String to = "indirizzo_destinazione@blahblah.it";
        private String subject = "Test Email con protocollo SMTP";
    
        public StrippedSMTPSend() throws Exception {
            Properties props = System.getProperties();
            if (mailhost != null) {
                props.put("mail." + prot + ".host", mailhost);
            }
            if (auth) {
                props.put("mail." + prot + ".auth", "true");
            }
    
            Session session = Session.getInstance(props, null);
            if (debug) {
                session.setDebug(true);
            }
    
            // construct the message
            Message msg = new MimeMessage(session);
            if (from != null) {
                msg.setFrom(new InternetAddress(from));
            }
            else {
                msg.setFrom();
            }
    
            msg.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to, false));
    
            msg.setSubject(subject);
            String text = "Inviato tramite Java Mail, con alcune funzioni "+
                    "di autenticazione. La versione in uso è JavaMail 1.4";
    
            msg.setText(text);
    
            SMTPTransport t = (SMTPTransport)session.getTransport(prot);
            try {
                if (auth)
                    t.connect(mailhost, user, password);
                else
                    t.connect();
                t.sendMessage(msg, msg.getAllRecipients());
            }
            finally {
                if (verbose)
                    System.out.println("Response: " + t.getLastServerResponse());
                t.close();
            }
    
            msg.setHeader("X-Mailer", mailer);
            msg.setSentDate(new Date());
    
            System.out.println("\nL'email è stata inviata con successo.");
    
        }
    
        public static void main(String[] argv) {
    
            try {
                new StrippedSMTPSend();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    Utilizzo come server smtp out.alice.it, su cui mi autentico (ho cancellato i dati, per ovvi motivi di privacy).

    Quel debug = true farà in modo che tutti i passaggi e le varie richieste vengano stampate a video, così in caso di problemi puoi isolare quale passaggio ti stia dando noie e cercare una soluzione.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Non funziona nel senso che non mi maschera il mio indirizzo, la mail la manda correttamente...Ora ti posto un po di codice...

    Qui viene costruito il messaggio e viene inviato:

    codice:
    public void inviaMessaggio(String modelloMail, String toAddress, String subject) {
             try {
                 getMessage().setSubject(subject);
                 getMessage().addRecipient(Message.RecipientType.TO, new InternetAddress(toAddress)); 
    
                 MimeMultipart multipart = new MimeMultipart("related");
                 BodyPart messageBodyPart = new MimeBodyPart();
    
                 DataSource fds1 = new URLDataSource(new URL(modelloMail + toAddress));
                 messageBodyPart.setDataHandler(new DataHandler(fds1));
                 BodyPart messageBodyPart2 = new MimeBodyPart();
    
                 DataSource fds = new URLDataSource(new URL(JdkConf.getProperty("img.logo")));
                 messageBodyPart2.setDataHandler(new DataHandler(fds));
                 messageBodyPart2.setHeader("Content-ID", "<logo>");
    
                 multipart.addBodyPart(messageBodyPart);
                 multipart.addBodyPart(messageBodyPart2);
    
                 getMessage().setContent(multipart);
                 getMailSender().send(getMessage());
    
             } catch (MalformedURLException ex) {
                 Logger.getLogger(MailManagerImpl.class.getName()).log(Level.SEVERE, null, ex);
             } catch (MessagingException ex) {
                 Logger.getLogger(MailManagerImpl.class.getName()).log(Level.SEVERE, null, ex);
             } catch (MailException ex) {
                 //log it and go on
                 System.err.println(ex.getMessage());
                 ex.printStackTrace();
             }
          }
    Il messaggio viene costruito da una pagina jsp in cui vi è un logo e testo, ma questa parte si puo tralasciare, dato che il messaggio è inviato correttamente, ti serve sapere che toAddress è la destinazione, getMessage() torna una proprieta della classe, di tipo MimeMessage e getMailSender() trona un'altra proprieta JavaMailSenderImpl...qui ho provato a fare getMessag().setFrom(...) come avevi suggerito anche te, ma il risultato è che mi mette sia l'indirizzo fittizio che il mio vero indirizzo(che setto nell'applicationContext.xml nel bean "smtpAuthenticator").

    L'autenticazione la faccio estendendo la classe javax.mail.Authenticator e implementando

    codice:
    public PasswordAuthentication getPasswordAuthentication();
    e naturalmente con credenziali valide va a buon fine(invia la mail) con credenziali false fallisce.

    Dentro l'ApplicationContext.xml di Spring setto gli atri dati(username, password, host ecc.) e creo la session dandogli il fil property e proprio l'autenticator:

    codice:
    <bean id="smtpAuthenticator" class="it.societa.mail.SmtpAuthenticator">
            <constructor-arg value="xxx" />
            <constructor-arg value="xxx" />
        </bean>
    
        <bean id="mailSession" class="javax.mail.Session"
    factory-method="getInstance">
            <constructor-arg>
                <props>
                    <prop key="mail.smtp.auth">true</prop>
                    <prop key="mail.smtp.socketFactory.port">465</prop>
                    <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                    <prop key="mail.smtp.socketFactory.fallback">false</prop>
                </props>
            </constructor-arg>
            <constructor-arg ref="smtpAuthenticator" />
        </bean>
    
        <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <property name="host">
                <value>smtp.gmail.com</value>
            </property>
            <property name="username">
                <value>mioindirizzo@gmail.com</value>
            </property>
            <property name="session" ref="mailSession" />
        </bean>
    
        <bean id="message" class="javax.mail.internet.MimeMessage">
            <constructor-arg>
                <ref bean="mailSession" />
            </constructor-arg>
        </bean>
    
        <bean id="mailManager" class="it.jdk.management.mail.MailManagerImpl">
            <property name="mailSender">
                <ref bean="mailSender"/>
            </property>
            <property name="message">
                <ref bean="message"/>
            </property>
        </bean>
      
        <bean id="entityService" class="it.societa.services.impl.EntityServiceImpl">
            <property name="genericDAO" ref="genericDAO"/>
            <property name="mailManager" ref="mailManager"/>
        </bean>
    Queste sono le parti fondamentali dell'invio della mail...Comunque ti ripeto non mi da errori, semplicemente non riesco a mascherare il mio indirizzo...Grazie ancora.

    Cia cia

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non c'è nessun setFrom, per cui, penso (ma non vedendone il codice), che da qualche parte, presumibilmente in getMailSender (che credo si occupi dell'autenticazione e dell'invio vero e proprio) vengano usati i dati di default, ovvero l'username/indirizzo che hai settato nel tuo file xml. Vedi se basta aggiungere un setFrom lì dove crei il messaggio vero e proprio, prima di mandarlo in pasto a getMailSender().send oppure se non ti convenga sistemare le cose in getMailSender ed aggiungere i dati "fittizi" nel file xml
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Scusami le righe

    codice:
    Address addressFrom = new InternetAddress("mioIndirizzo@posta.it","indirizzoFittizio@posta.xyz");
    getMessage().setFrom(addressFrom);
    che avevo messo nel codice prima dell'invio della mail, le ho tolte una volta visto che non mi risolvono il problema...In quel modo mi mettono indirizzoFittizio@posta.xyz, ma affianco tra parentesi scrive pure mioIndirizzo@posta.it, non riesco a toglierlo del tutto...

    Nel file xml ho provato a mettere

    codice:
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <property name="host">
                <value>smtp.gmail.com</value>
            </property>
            <property name="username">
                <value>indirizzoFittizio@posta.xy</value>
            </property>
            <property name="session" ref="mailSession" />
    </bean>
    che equivale esattamente a fare nel codice:

    codice:
    getMailSender().setHost("smtp.gmail.com");
    getMailSender().setUsername("indirizzoFittizio@posta.xy");
    getMailSender è un semplice metodo getter che ritorna un oggetto org.springframework.mail.javamail.JavaMailSenderIm pl e il metodo send è esattamente quello della classe JavaMailSenderImpl ed invia la mail...Purtroppo il risultato di settare indirizzoFittizio@posta.xy in setUsername(...) è che non se ne accorge nemmeno, ovvero scrive esattamente mioIndirizzo@posta.it.

    Praticamente in tutta l'applicazione ho lasciato il mio indirizzo solo nel bean dell'autenticazione

    codice:
    <bean id="smtpAuthenticator" class="it.societa.mail.SmtpAuthenticator">
            <constructor-arg value="xxx" />
            <constructor-arg value="xxx" />
     </bean>
    dove necessariamente vanno inseriti un'indirizzo valido e la password a cui fa riferimento. Quindi sono giunto alla conclusione che lui lo legge li e non c'è modo di non farglielo ripetere nella mail...Sto arrivando alla conclusione che dovrei utilizzare un server di posta che non mi obblighi ad autenticarmi in uscita per inviare la mail...

    Grazio ancora Andrea.

    Cia cia

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Cambia questa:
    codice:
    Address addressFrom = new InternetAddress("mioIndirizzo@posta.it","indirizzoFittizio@posta.xyz");
    così:

    codice:
    Address addressFrom = new InternetAddress("indirizzoFittizio@posta.xyz");
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Niente da fare...

    Non se lo calcola proprio...mi mette solo il mio indirizzo in questo modo...

    Ti auguro una buona serata

    Cia cia

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    44
    Cia

    ho risolto il problema utilizzando un server di posta che non chiede l'autenticazione in uscita, in questo modo settando semplicemente un 'from' fittizio funziona...Grazie degli aiuti Andrea

    Cia cia

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.