2009-11-23 8 views

risposta

20

Il codice seguente fa ciò che vuoi e lo fa nel modo corretto. Rileggere quello che lei stesso ha pubblicato un commento

Da: RFC2821: 4.4 Trace Information

Quando il server di consegna SMTP rende la "consegna finale" di un messaggio, inserisce una linea di ritorno percorso al inizio i dati della posta. È necessario utilizzare del percorso di ritorno; mail I sistemi DEVONO supportarlo. La riga del percorso di ritorno conserva le informazioni nello dal comando MAIL. Qui, la consegna finale significa che il messaggio ha lasciato l'ambiente SMTP . Normalmente, questo significava essere stato consegnato a l'utente di destinazione o una caduta di posta associata, ma in alcuni casi potrebbe essere ulteriormente elaborato e trasmesso da un altro sistema di posta.

e poche righe dopo.

Un sistema SMTP messaggio originario NON DEVONO inviare un messaggio che già contiene un'intestazione Return-path.

Se leggete attentamente questo si capirà che solo l'agente server SMTP/consegna finale dovrebbe aggiungere l'intestazione Return-Path. Non è qualcosa che tu, come cliente (prova a mandare una mail), dovresti fare. L'ultimo smtp-server baserà l'intestazione Return-Path sull'indirizzo del mittente della busta (parte SMTP MAIL FROM).

Quindi l'impostazione mail.smtp.from è il modo corretto per dire a java che l'indirizzo del mittente della busta dovrebbe essere diverso dalla parte from.

Se avete problemi a capire quali sono i diversi from, date un'occhiata a una sessione smtp di telnet. Dove [email protected] dovrebbe corrispondere a smtp.mail.from e [email protected] a m.addFrom(...);

telnet smtp.example.com 25 
220 smtp.example.com ESMTP ..... 

helo computername 
250 smtp.example.com Hello computername [123.123.123.123] 

mail from:<[email protected]> 
250 <[email protected]> is syntactically correct 

rcpt to:<[email protected]> 
250 <[email protected]> verified 

data 
354 Enter message, ending with "." on a line by itself 
To: Joey <[email protected]> 
From: Joey <[email protected]> 
Subject: Joey 

Hey Joey! 

. 
250 OK id=.... 

Quit 

props.put("mail.smtp.from", "[email protected]"); 
Session session = Session.getDefaultInstance(props, null); 
MimeMessage m = new MimeMessage(session); 
m.addFrom(InternetAddress.parse("[email protected]")); 
+0

Credo che sarebbe la soluzione. Ma da quello che ho letto, il server di posta deve supportarlo. "Quando il server SMTP di consegna effettua la" consegna finale "di un messaggio, inserisce una linea di percorso di ritorno all'inizio dei dati di posta.Questo uso del percorso di ritorno è richiesto, i sistemi di posta DEVONO supportarlo. la linea del percorso conserva le informazioni nel dal comando MAIL. " in http://www.ietf.org/rfc/rfc2821.txt – Ricardo

+0

Controlla risposta estesa – jitter

+0

ho cercato di farlo su molti altri livelli del codice, questa è l'unica soluzione che ha funzionato per me – kommradHomer

6

ho sperimentato lo stesso problema e ho trovato l'unica soluzione discusso mettendo proprietà props.put "mail.smtp.from" (" mail.smtp.from "," [email protected] ");

Ancora questa soluzione non era adatta a me perché sto inviando molti e-mail da diversi utenti, quindi la sessione di ricreazione per ogni e-mail sarebbe orribile per prodictivity.

Così ho trovato un'altra soluzione dopo aver letto le fonti JavaMail:

1) Uso SMTPMessage (si estende MIMEMessage) invece di MIMEMessage.

2) Utilizzare il metodo setEnvelopeFrom (String).

3) Utilizzare SMTPTransport per inviare e-mail (non ho provato con altri).

Ecco un esempio di codice:

SMTPMessage message = new SMTPMessage(session); 
message.setEnvelopeFrom("[email protected]"); 
... 
transport.sendMessage(message, message.getAllRecipients()); 
+0

Questo ha funzionato per me quando il metodo "mail.smtp.from" non lo ha fatto. Grazie! Delizioso. – Nick

+0

non ha funzionato per me – Anita

Problemi correlati