API JavaMail - Server SMTP

SMTP è l'acronimo di Simple Mail Transfer Protocol. È uno standard Internet per la trasmissione di posta elettronica (e-mail) su reti IP (Internet Protocol). SMTP utilizza la porta TCP 25. Le connessioni SMTP protette da SSL sono note con l'abbreviazione SMTPS, sebbene SMTPS non sia un protocollo a sé stante.

L'API JavaMail ha un pacchetto com.sun.mail.smtpche agiscono come provider di protocollo SMTP per accedere a un server SMTP. La tabella seguente elenca le classi incluse in questo pacchetto:

Classe Descrizione
SMTPMessage Questa classe è una specializzazione della classe MimeMessage che consente di specificare varie opzioni e parametri SMTP che verranno utilizzati quando questo messaggio viene inviato tramite SMTP.
SMTPSSLTransport Questa classe implementa la classe astratta Transport utilizzando SMTP su SSL per l'invio e il trasporto dei messaggi.
SMTPTransport Questa classe implementa la classe astratta Transport utilizzando SMTP per l'invio e il trasporto dei messaggi.

La tabella seguente elenca le eccezioni generate:

Eccezione Descrizione
SMTPAddressFailedException Questa eccezione viene generata quando il messaggio non può essere inviato.
SMTPAddressSucceededException Questa eccezione è concatenata da SendFailedException quando la proprietà mail.smtp.reportsuccess è true.
SMTPSenderFailedException Questa eccezione viene generata quando il messaggio non può essere inviato.
SMTPSendFailedException Questa eccezione viene generata quando il messaggio non può essere inviato. L'eccezione include l'indirizzo del mittente, che il server di posta ha rifiutato.

Il com.sun.mail.smtpprovider utilizza l'autenticazione SMTP facoltativamente. Per utilizzare l'autenticazione SMTP è necessario impostare la proprietà mail.smtp.auth o fornire al trasporto SMTP un nome utente e una password quando ci si connette al server SMTP. Puoi farlo utilizzando uno dei seguenti approcci:

  • Fornire un oggetto Authenticator durante la creazione della sessione di posta e fornire le informazioni su nome utente e password durante la richiamata Authenticator. La proprietà mail.smtp.user può essere impostata per fornire un nome utente predefinito per la richiamata, ma la password dovrà comunque essere fornita esplicitamente. Questo approccio consente di utilizzare il metodo di invio di trasporto statico per inviare messaggi. Per esempio:

  • Transport.send(message);
  • Chiama il metodo di connessione di trasporto in modo esplicito con argomenti di nome utente e password. Per esempio:

    Transport tr = session.getTransport("smtp");
    tr.connect(smtphost, username, password);
    msg.saveChanges();
    tr.sendMessage(msg, msg.getAllRecipients());
    tr.close();

Il provider del protocollo SMTP supporta le seguenti proprietà, che possono essere impostate nell'oggetto JavaMail Session. Le proprietà sono sempre impostate come stringhe. Per esempio:

props.put("mail.smtp.port", "587");

Qui il file Type colonna descrive come viene interpretata la stringa.

Nome genere Descrizione
mail.smtp.user Corda Nome utente predefinito per SMTP.
mail.smtp.host Corda Il server SMTP a cui connettersi.
mail.smtp.port int La porta del server SMTP a cui connettersi, se il metodo connect () non ne specifica esplicitamente una. Il valore predefinito è 25.
mail.smtp.connectiontimeout int Valore di timeout della connessione socket in millisecondi. L'impostazione predefinita è timeout infinito.
mail.smtp.timeout int Valore timeout I / O socket in millisecondi. L'impostazione predefinita è timeout infinito.
mail.smtp.from Corda Indirizzo e-mail da utilizzare per il comando MAIL SMTP. Questo imposta l'indirizzo di ritorno della busta. Il valore predefinito è msg.getFrom () o InternetAddress.getLocalAddress ().
mail.smtp.localhost Corda Nome host locale utilizzato nel comando SMTP HELO o EHLO. Il valore predefinito è InetAddress.getLocalHost (). GetHostName (). Normalmente non dovrebbe essere necessario impostare se il JDK e il servizio di denominazione sono configurati correttamente.
mail.smtp.localaddress Corda Indirizzo locale (nome host) a cui collegarsi durante la creazione del socket SMTP. Il valore predefinito è l'indirizzo scelto dalla classe Socket. Normalmente non dovrebbe essere necessario impostare.
mail.smtp.localport int Numero di porta locale a cui collegarsi durante la creazione del socket SMTP. Il valore predefinito è il numero di porta selezionato dalla classe Socket.
mail.smtp.ehlo booleano Se falso, non tentare di collegarsi con il comando EHLO. Il valore predefinito è vero.
mail.smtp.auth booleano Se true, prova ad autenticare l'utente utilizzando il comando AUTH. Il valore predefinito è false.
mail.smtp.auth.mechanisms Corda Se impostato, elenca i meccanismi di autenticazione da considerare. Verranno utilizzati solo i meccanismi supportati dal server e supportati dall'attuale implementazione. L'impostazione predefinita è "LOGIN PLAIN DIGEST-MD5 NTLM", che include tutti i meccanismi di autenticazione supportati dall'attuale implementazione.
mail.smtp.auth.login.disable booleano Se vero, impedisce l'uso del comando AUTH LOGIN. L'impostazione predefinita è false.
mail.smtp.auth.plain.disable booleano Se true, impedisce l'uso del comando AUTH PLAIN. L'impostazione predefinita è false.
mail.smtp.auth.digest-md5.disable booleano Se vero, impedisce l'uso del comando AUTH DIGEST-MD5. L'impostazione predefinita è false.
mail.smtp.auth.ntlm.disable booleano Se true, impedisce l'utilizzo del comando AUTH NTLM. L'impostazione predefinita è false.
mail.smtp.auth.ntlm.domain Corda Il dominio di autenticazione NTLM.
mail.smtp.auth.ntlm.flags int Flag specifici del protocollo NTLM.
mail.smtp.submitter Corda Il mittente da utilizzare nel tag AUTH nel comando MAIL FROM. Tipicamente utilizzato da un relay di posta per trasmettere informazioni sul mittente originale del messaggio.
mail.smtp.dsn.notify Corda L'opzione NOTIFICA al comando RCPT. O MAI o una combinazione di SUCCESS, FAILURE e DELAY (separati da virgole).
mail.smtp.dsn.ret Corda L'opzione RET al comando MAIL. O FULL o HDRS.
mail.smtp.sendpartial booleano Se impostato su true e un messaggio ha alcuni indirizzi validi e altri non validi, invia il messaggio comunque, segnalando l'errore parziale con SendFailedException. Se impostato su false (impostazione predefinita), il messaggio non viene inviato a nessuno dei destinatari se è presente un indirizzo del destinatario non valido.
mail.smtp.sasl.enable booleano Se impostato su true, provare a utilizzare il pacchetto javax.security.sasl per scegliere un meccanismo di autenticazione per l'accesso. Il valore predefinito è false.
mail.smtp.sasl.mechanisms Corda Uno spazio o un elenco separato da virgole di nomi di meccanismi SASL da provare a utilizzare.
mail.smtp.sasl.authorizationid Corda L'ID di autorizzazione da utilizzare nell'autenticazione SASL. Se non impostato, viene utilizzato l'ID di autenticazione (nome utente).
mail.smtp.sasl.realm Corda Il regno da utilizzare con l'autenticazione DIGEST-MD5.
mail.smtp.quitwait booleano Se impostato su false, viene inviato il comando QUIT e la connessione viene immediatamente chiusa. Se impostato su true (impostazione predefinita), il trasporto attende la risposta al comando QUIT.
mail.smtp.reportsuccess booleano Se impostato su true, fa in modo che il trasporto includa un'eccezione SMTPAddressSucceededException per ogni indirizzo che ha esito positivo.
mail.smtp.socketFactory Fabbrica di prese Se impostata su una classe che implementa l'interfaccia javax.net.SocketFactory, questa classe verrà utilizzata per creare socket SMTP.
mail.smtp.socketFactory.class Corda Se impostato, specifica il nome di una classe che implementa l'interfaccia javax.net.SocketFactory. Questa classe verrà utilizzata per creare socket SMTP.
mail.smtp.socketFactory.fallback booleano Se impostato su true, la mancata creazione di un socket utilizzando la classe socket factory specificata causerà la creazione del socket utilizzando la classe java.net.Socket. Il valore predefinito è vero.
mail.smtp.socketFactory.port int Specifica la porta a cui connettersi quando si utilizza la produzione socket specificata. Se non impostata, verrà utilizzata la porta predefinita.
mail.smtp.ssl.enable booleano Se impostato su true, utilizza SSL per connetterti e utilizza la porta SSL per impostazione predefinita. Il valore predefinito è false per il protocollo "smtp" e true per il protocollo "smtps".
mail.smtp.ssl.checkserveridentity booleano Se impostato su true, controlla l'identità del server come specificato da RFC 2595. Il valore predefinito è false.
mail.smtp.ssl.trust Corda Se impostato e non è stato specificato un factory socket, abilita l'uso di MailSSLSocketFactory.
Se impostato su "*", tutti gli host sono affidabili.
Se impostato su un elenco di host separati da spazi bianchi, tali host sono considerati attendibili.
In caso contrario, l'attendibilità dipende dal certificato presentato dal server.
mail.smtp.ssl.socketFactory Fabbrica socket SSL Se impostata su una classe che estende la classe javax.net.ssl.SSLSocketFactory, questa classe verrà utilizzata per creare socket SSL SMTP.
mail.smtp.ssl.socketFactory.class Corda Se impostato, specifica il nome di una classe che estende la classe javax.net.ssl.SSLSocketFactory. Questa classe verrà utilizzata per creare socket SSL SMTP.
mail.smtp.ssl.socketFactory.port int Specifica la porta a cui connettersi quando si utilizza la produzione socket specificata. Se non impostata, verrà utilizzata la porta predefinita.
mail.smtp.ssl.protocols corda Specifica i protocolli SSL che verranno abilitati per le connessioni SSL. Il valore della proprietà è un elenco separato da spazi di token accettabili per il metodo javax.net.ssl.SSLSocket.setEnabledProtocols.
mail.smtp.starttls.enable booleano Se true, abilita l'uso del comando STARTTLS (se supportato dal server) per passare la connessione a una connessione protetta da TLS prima di emettere qualsiasi comando di accesso. Il valore predefinito è false.
mail.smtp.starttls.required booleano Se vero, richiede l'uso del comando STARTTLS. Se il server non supporta il comando STARTTLS o il comando non riesce, il metodo di connessione fallirà. Il valore predefinito è false.
mail.smtp.socks.host corda Specifica il nome host di un server proxy SOCKS5 che verrà utilizzato per le connessioni al server di posta.
mail.smtp.socks.port corda Specifica il numero di porta per il server proxy SOCKS5. Dovrebbe essere utilizzato solo se il server proxy non utilizza il numero di porta standard 1080.
mail.smtp.mailextension Corda Stringa di estensione da aggiungere al comando MAIL.
mail.smtp.userset booleano Se impostato su true, utilizzare il comando RSET invece del comando NOOP nel metodo isConnected. In alcuni casi sendmail risponderà lentamente dopo molti comandi NOOP; l'uso di RSET evita questo problema di sendmail. Il valore predefinito è false.

In generale, le applicazioni non dovrebbero aver bisogno di utilizzare direttamente le classi in questo pacchetto. Invece, dovrebbero utilizzare le API definite dal pacchetto javax.mail (e dai sottopacchetti). Supponiamo ad esempio che le applicazioni non dovrebbero mai costruire direttamente istanze di SMTPTransport. Invece, dovrebbero utilizzare il metodo getTransport Session per acquisire un oggetto Transport appropriato.

Esempi di utilizzo del server SMPT sono illustrati nel capitolo Invio di e-mail .